2013-09-04 11 views
9

내 노드 서버에 대한 launchd.plist 파일을 쓰려고합니다. 내 노드 서버를 실행하는 데 영원히 사용하고 있습니다. 부팅 할 때 서버를 시작하고 싶습니다. 나는 mongodb 발사 plist가 먼저 달릴 때까지 기다리고 싶다.OSX launchd plist 노드에 대한 영구적 인 프로세스

나는 homebrew를 사용하여 mongobb를 설치했으며 이미 launchd.plist와 함께 제공되었습니다. MongoDB를위한

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist 

PLIST는 다음과 같습니다 :

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Label</key> 
    <string>homebrew.mxcl.mongodb</string> 
    <key>ProgramArguments</key> 
    <array> 
    <string>/usr/local/opt/mongodb/mongod</string> 
    <string>run</string> 
    <string>--config</string> 
    <string>/usr/local/etc/mongod.conf</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <false/> 
    <key>WorkingDirectory</key> 
    <string>/usr/local</string> 
    <key>StandardErrorPath</key> 
    <string>/usr/local/var/log/mongodb/output.log</string> 
    <key>StandardOutPath</key> 
    <string>/usr/local/var/log/mongodb/output.log</string> 
    <key>HardResourceLimits</key> 
    <dict> 
    <key>NumberOfFiles</key> 
    <integer>1024</integer> 
    </dict> 
    <key>SoftResourceLimits</key> 
    <dict> 
    <key>NumberOfFiles</key> 
    <integer>1024</integer> 
    </dict> 
</dict> 
</plist> 

만약 내가 종료 컴퓨터와 MongoDB를이 예상대로 최대 발사를 다시 시작 나는 다음 실행했다.

그러나 노드 서버가 시작되지 않습니다. 어떤 아이디어?

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
     <key>KeepAlive</key> 
     <dict> 
      <key>SuccessfulExit</key> 
      <false/> 
     </dict> 
     <key>Label</key> 
     <string>com.test.app</string> 
     <key>ProgramArguments</key> 
     <array> 
      <string>/usr/local/bin/forever</string> 
      <string>-a</string> 
      <string>-l</string> 
      <string>/var/log/app/app.log</string> 
      <string>-e</string> 
      <string>/var/log/app/app_error.log</string> 
      <string>/data/server/app.js</string> 
     </array> 
     <key>RunAtLoad</key> 
     <true/> 
     <key>StartInterval</key> 
     <integer>3600</integer> 
    </dict> 
</plist> 

편집 :

로그 파일을 작성하고 내가 볼이 :

ENV : 노드 : 그런 파일이나 디렉토리는

는 생각이 노드 것을 의미합니다 바이너리를 찾을 수 없습니다. $ PATH를 echo 할 수 있고/usr/local/bin이 내 경로에 있습니다. 터미널에서 노드를 시작할 수 있습니다. 아이디어?

답변

1

추가 노드 영원히 전에 :

<key>ProgramArguments</key> 
<array> 
    <string>/usr/local/bin/node</string> 
    <string>/usr/local/bin/forever</string> 
    <string>/path/to/app.js</string> 
</array> 
+0

예상대로이 작동하지 않습니다. 'app.js'를 시작하는 동안'sudo forever list' 또는'forever list'로 영원히 돌아가는 것을 볼 수 없습니다. – jczaplew

+0

시작 앞에 app.js를 삽입해야합니다. 그러면 실행중인 모든 노드 앱을 나열 할 수 있습니다. – erwin

6

나도이 문제를 가지고,하지만 난 시작시 실행되는 자동화 응용 프로그램을 사용하여 해결했다.

  1. 열기 자동화를 선택, 워크 플로우의 새로운 응용 프로그램

  2. 삽입 "실행 쉘 스크립트"

  3. 사용하여 경로로 경로를 변경 쉘 스크립트에서이 코드

export PATH=/usr/local/bin/:$PATH 
cd /path/to/your/nodejs/app 
forever start app.js 
  1. 시스템 환경 설정 >> 사용자 정보로 이동하십시오. & 그룹을 클릭하고 로그인 항목 탭을 클릭하십시오.

  2. Automator 앱을 추가하고 만족하십시오.

해결책의 중요한 부분은 스크립트의 첫 번째 줄 (경로에 저장소 추가)입니다. 아마도 bash 스크립트에서 지적한 Startup Item을 추가하기 만하면됩니다 (Automator 스크립트도 없음). 자유롭게 사용해보십시오!

+0

실행기 데몬, /etc/rc.common 및 기타 찾을 수있는 모든 것들을 시도해보십시오.이 자동화 프로그램입니다. 앱이이를 달성하는 가장 좋은 방법입니다. – Dimitris

9

환경 추가 나를 위해 일한 변수.

<key>EnvironmentVariables</key> 
<dict> 
    <key>PATH</key> 
    <string>/usr/local/bin/:$PATH</string> 
</dict> 

노드 응용 프로그램에 WorkingDirectory를 추가해야 할 수도 있습니다.

<key>WorkingDirectory</key> 
<string>path/to/your/node/app</string> 
+0

는'bash -c node index.js'를 실행하려 할 때 내 문제를 해결했습니다. – terrace

0

언제 node-launchd이 나왔는지 확실하지 않습니다. 그러나, 그것은 더 신뢰할 수있는 솔루션 인 것 같습니다.

워크 플로우가 생성되어 로그인 항목에 추가되는 솔루션에 대한 평가 또한 매우 감사합니다. 그러나 문제는 응용 프로그램이 서버에 제공되고 서버가 다시 시작될 때 사용자가 시스템에 로그인하기 전에 응용 프로그램이 시작되는지 궁금합니다. 그래도 시도하지 않았다.

0

이것은 원래 질문에 대한 답변이 아니지만 재부팅 후 노드 서버를 시작하고 계속 실행하는 방법을 찾고있었습니다. pm2은 위의 forever에 대한 솔루션보다 훨씬 쉽게 설정할 수 있습니다.

# install pm2 
npm install pm2 -g 

# start server 
pm2 start app.js 

# start pm2 after reboot (might need sudo) 
$ pm2 startup 

http://pm2.keymetrics.io/docs/usage/startup/