2013-09-04 22 views
9

ノードサーバー用のlaunchd.plistファイルを作成しようとしています。私は自分のノードサーバーを実行するために永遠に使用しています。私はサーバーが起動時に起動したい。私はまた、mongodb launchd plistが最初に走るのを待っていたいと思います。OSXがノード永久プロセスを起動しました

私はhomebrewを使用してmongobbをインストールしました。すでにlaunchd.plistが付属しています。 Iシャットダウンした場合

<!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のアップ発火再起動:MongoDBのための

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

のplistは次のとおりです。私は次のことを実行しています。

ただし、ノードサーバーが起動していません。何か案は?

<?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> 

EDIT:

ファイルをログに記録する書き込み、私はこれを参照してください。

ENV:ノード:そのようなファイルやディレクトリは

ありませんが、私は、これは、そのノードを意味だと思いますバイナリが見つかりません。私は$ PATHをエコーすることができ、/ 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'、あなたはそれが永遠にlist'' list'永遠のいずれか 'sudoをして永遠の下で実行されているか確認することができません。 – jczaplew

+0

あなたが強いapp.js前開始を挿入する必要があり、その後、あなたが実行しているすべてのノードのアプリを一覧表示することができます...のlaunchdデーモン、/etc/rc.commonと私は見つけることができる他のすべてのものは、このAutomatorのをしようと – erwin

6

私もこの問題を抱えていたが、私は起動時に実行されるのAutomatorアプリを使用して、それを解決しました。

  1. オープンAutomatorを選択します、あなたのワークフローの新しいアプリケーション

  2. を挿入し、「ファイル名を指定して実行シェルスクリプト」

  3. 使用あなたのパスにパスを変更するシェルスクリプトでは、このコード、

export PATH=/usr/local/bin/:$PATH 
cd /path/to/your/nodejs/app 
forever start app.js 
  1. システム設定>>ユーザ&グループに移動し、[ログイン項目]タブをクリックしてください。

  2. あなたのAutomatorアプリを追加して、満足してください。

解決策の重要な部分は、スクリプトの最初の行(パスにビンを追加する)です。おそらく、bashスクリプトで指されたスタートアップ項目を追加することもできます(Automatorスクリプトはありません)。気軽に試してみてください!

+0

Asfter。アプリはこれを達成するための最良の方法です。 – 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/

関連する問題