9

ノード サーバー用の launchd.plist ファイルを書き込もうとしています。ノードサーバーを実行するために永遠に使用しています。起動時にサーバーを起動したいと思います。また、mongodb launchd plist が最初に実行されるのを待ちたいと思います。

homebrew を使用して mongobb をインストールしましたが、既に launchd.plist が付属しています。私は以下を実行しました:

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

mongodb の 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: node: そのようなファイルまたはディレクトリはありません

これは、ノード バイナリが見つからないことを意味していると思います。$PATH を echo でき、/usr/local/bin がパスにあります。ターミナルからノードを起動できます。アイデア?

4

5 に答える 5

14

環境変数を追加するとうまくいきました。

<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>
于 2014-10-15T18:53:03.440 に答える
6

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

  1. Automator を開き、[新しいアプリケーション] を選択します

  2. ワークフローに「Run Shell Script」を挿入します

  3. シェルスクリプトでこのコードを使用して、パスを自分のパスに変更します

export PATH=/usr/local/bin/:$PATH
cd /path/to/your/nodejs/app
forever start app.js
  1. システム環境設定 >> ユーザーとグループに移動し、ログイン項目タブをクリックします

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

ソリューションの重要な部分は、スクリプトの最初の行です (ビンをパスに追加します)。bash スクリプト (Automator スクリプトなし) を指すスタートアップ項目を追加することもおそらくうまくいくでしょう。お気軽に試してみてください!

于 2013-10-17T22:23:45.660 に答える
1

永遠の前にノードを追加します。

<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/node</string>
    <string>/usr/local/bin/forever</string>
    <string>/path/to/app.js</string>
</array>
于 2013-09-11T06:04:28.640 に答える
1

これは元の質問に対する回答ではありませんが、再起動後にノード サーバーを起動する (そして実行し続ける) 簡単な方法を探していました。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/

于 2016-12-04T20:47:31.440 に答える