2012-01-02 3 views
3

저는 현재 osx lion에서 서버 관리를 위해 rvm과 unicorn을 사용하고 있습니다. gemset도 사용합니다. 그래서 내 서버를 시작하기 위해 내가 다음을 수행OSX 시동시 유니콘 시작

: 내 컴퓨터가 시작될 때

cd /xyz/project 
unicorn -c /xyz/project/config/unicorn.rb -E production 

는 지금은이 서버 시작을합니다. 나는 ~/Library/LaunchAgents/에 plist 파일을 추가하고 launchctl으로 활성화하는 방법에 대해 읽었지 만, 내 서버를 시작하기위한이 plist 파일에는 무엇을 써야할지 모릅니다.

어떤 아이디어가 있습니까? 또한 gemset가이 dir에 cd'ing하여 정품 인증을 받아야하기 때문에 어렵다고 생각합니다.

모든 도움에 감사드립니다. 시스템 환경 설정> 계정> 로그인 항목에이 파일을 추가, 당신은 OS의 X를 사용하는 가정

chmod +x scriptname.sh 

다음 :

+0

당신이 OS X의에 귀하의 유니콘을 시작하는 관리나요 시작? 그렇다면 작업 스크립트를 어딘가에 게시하십시오. 나는 os x 서버에서 성공하지 않고 똑같이하려고 노력하고있다 ... – Yannis

답변

9

LaunchAgent가 아닌 LaunchDaemon으로 실행하고 싶을 것입니다. 데몬은 시스템 컨텍스트에서 실행되므로 누군가 로그인하기 전에 시스템 시작시 실행할 수 있습니다. 에이전트는 로그인 세션 내에서 실행되므로 사용자가 로그인 할 때까지 시작하지 않습니다 (루트가 아닌 사용자로 실행하고 두 명의 사용자 빠른 전환으로 한 번에 로그인하면 각 사용자별로 사본이 실행됩니다 ...). .plist 파일 자체는 데몬 대 에이전트와 거의 동일하지만 차이점은/Library/LaunchDaemons 또는/Library/LaunchAgents에 넣었는지 여부입니다.

파일 자체는 몇 가지 사항에 따라 다릅니다. 나는 그것이 시스템 부팅시 시작될 필요가 있다고 가정하고있다. 자체를 대몬 비하인화 (즉, 배경으로 떨어 뜨림)합니까? launchd는 스스로를 대몬 화하기 위해 시작하는 프로그램이 마음에 들지 않습니다. 모니터 할 수 있기를 원하기 때문에 충돌/종료시 다시 시작할 수 있습니다. 유니콘이 데몬 화하지 않는 옵션을 가지고 있다면, 그것을 사용하십시오; 그렇지 않다면, .plist 파일을 약간 수정해야합니다. 첫째, 여기에 기본 실행에서-시작 LaunchDaemon .plist 파일입니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Disabled</key> 
     <false/> 
     <key>Label</key> 
     <string>local.unicorn</string> 
     <key>ProgramArguments</key> 
     <array> 
       <string>/full/path/to/unicorn</string> 
       <string>-c</string> 
       <string>/xyz/project/config/unicorn.rb</string> 
       <string>-E</string> 
       <string>production</string> 
     </array> 
     <key>WorkingDirectory</key> 
     <string>/xyz/project</string> 
     <key>RunAtLoad</key> 
     <true/> 
     <key>EnableTransactions</key> 
     <false/> 
</dict> 
</plist> 

유니콘 daemonizes 자체는, 당신은 추가해야하는 경우이합니다 (</dict> 라인 전) :

 <key>KeepAlive</key> 
     <false/> 
     <key>AbandonProcessGroup</key> 
     <true/> 

이 경우, 디먼 화하지 않는 (또는 당신이이 ProgramArguments을 변경하여 daemonizing을 건너 얻을 수있다), 선택적으로 대신을 추가 할 수 있습니다

 <key>KeepAlive</key> 
     <true/> 

이름/라이브러리/LaunchDaemons/LOC 같은 파일 뭔가 al.unicorn.plist (이름은 레이블과 일치해야 함), 소유권을 root : wheel으로 설정하고 사용 권한을 600으로 설정하십시오. sudo launchctl load /Library/LaunchDaemons/local.unicorn.plist으로 활성화하거나 다시 부팅하여 활성화 할 수 있습니다.

편집 :

 <key>StandardOutPath</key> 
     <string>/tmp/unicorn.out</string> 
     <key>StandardErrorPath</key> 
     <string>/tmp/unicorn.err</string> 
     <key>Debug</key> 
     <true/> 

그런 다음 (sudo launchctl unload /Library/LaunchDaemons/local.unicorn.plist)를 언로드하고 다시로드하고,/tmp에 /var/log/system.log 확인 : 문제 해결을 위해, 당신은 .plist 파일에 다음과 같이 뭔가를 추가 할 수 있습니다 /unicorn.out 및 /tmp/unicorn.err에 대해 힌트를 얻으십시오.

EDIT2가 : 다른 사용자로 실행 같은 것을 추가 :

 <key>UserName</key> 
     <string>choise</string> 

EDIT3 : 내가 RVM에 익숙하지 않아요하고 구성을 처리하는 방법,하지만 당신은 몇 가지를 설정해야처럼 소리 환경 변수를 올바르게 설정하십시오. 일반 셸의 디렉토리에 cd'ing하지 않으므로 .rvmrc 파일이 실행되지 않습니다. 이것을 해결할 수있는 몇 가지 방법이 있습니다.

첫째, 당신은 환경 변수를 설정할 필요가 무엇인지 파악하고,이 같은으로 .plist 파일들을 추가 할 수 있습니다

 <key>EnvironmentVariables</key> 
     <array> 
       <key>ruby_string</key> 
       <string>ruby-1.9.2-p136</string> 
       <key>gemset_name</key> 
       <string>unicorn</string> 
     </array> 

...하지만, 특히, 조금 깨지기 쉬운 될 수있다 그들이 변하면; 일관되게 작동하려면 .rvmrc와 .plist 파일을 함께 업데이트해야합니다.

유니콘을 시작하기 전에 실제로 쉘을 열고 source에 필요한 모든 설정 파일을 설치하는 것이 좋습니다. 쉘 스크립트를 사용하거나 쉘에 필요한 명령 시퀀스를 (하나의 긴) 매개 변수로 포함시켜이 작업을 수행 할 수 있습니다. 이 작업을 수행하려면이 같은으로 ProgramArguments 섹션을 대체 :

 <key>ProgramArguments</key> 
     <array> 
       <string>/bin/bash</string> 
       <string>-c</string> 
       <string>source /etc/rvmrc; source /Users/server/.rvmrc; source .rvmrc; /Users/server/.rvm/gems/[email protected]/bin/unicorn -c /Users/server/Sites/Rails/q/config/unicorn.rb -E production</string> 
     </array> 

(하지만 존재하지 않는 rvmrc 파일 중 하나를 sourceing 생략.)

+0

unicorn에는 플래그 -D를 사용하여이를 daemonize하는 옵션이있다. 그래서 현재는 daemonize되지 않을 것이다. 나는 plist를 시험해 보겠다. – choise

+0

잘 작동하지 않습니다. 여기 내 plist 및 일부 터미널 명령이 있습니다. 이 명령으로 유니콘을 시작하면 이 작동합니다. https://gist.github.com/a69109245f38eb6f359d 좀 보시 겠어요? – choise

+0

'sudo launchctl load' 명령을 수행 할 때 오류가 있습니까? 시스템 로그에 암시적인 것이 있습니까? 더 많은 디버깅 정보를 얻는 방법에 대한 몇 가지 정보를 추가 했으므로 시도해보십시오 ... 또한 유니콘이 루트로 실행되어야한다고 가정합니다. 맞습니까? –

4

bash는 스크립트 작성 : 그것을 저장

#!/bin/sh 
cd /xyz/project 
unicorn -c /xyz/project/config/unicorn.rb -E production 

을하고 실행하기 .