これらの手順でデーモンが正常に動作するようになりました: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/
ただし、これによりアプリケーションがDEVELOPMENTモードで起動されるため、ログファイルはsocket.ioデバッグログでスパムされます。
upstart-conf-fileでNODE_ENVを本番に設定しようとしましたが、成功しませんでした。
script
export HOME="/root"
export NODE_ENV=production
exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
end script
うまくいきませんでした。
試してみる
exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
私の設定では、より少ないユーザーとしてsudoingしていますので、
exec Sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
また、別のユーザーから生成されるため、おそらく別の環境があります。私はここの初心者ですが、それは私のために動作します。
使用できる簡単なupstartスクリプトを次に示します。 Upstartは、スクリプトセクションや組み込みの多すぎるシェル構文を使用せずに、直接行う必要のあるすべてをサポートするようになりました。これには、環境変数(env
)、作業ディレクトリ(chdir
)、ユーザー/グループ(setuid
、setgid
)、ログ処理(console log
)など。ログファイルは処理され、/var/log/upstart/your_app.log
description "start and stop the example express.js/node.js server"
author "John Doe <[email protected]>"
start on filesystem and started networking
respawn
console log
chdir /opt/your_app
setuid your_app_user
setgid your_app_user
env PATH=./node_modules/.bin:./node/bin:/usr/bin
env NODE_ENV=production
exec app/server.js
実稼働環境でnode.jsを使用している場合は、forever.jsを使用してプログラムをデーモン化することをお勧めします https://github.com/nodejitsu/forever
Npmを使用してインストール:[Sudo] npm install forever -g
export NODE_ENV=production
を実行してforever start app.js
を実行するエラーログと標準出力ログを置く場所を指定することもできます。
herokuでNODE_ENVを設定するには:
heroku config:set NODE_ENV="production"
Ubuntu/Upstartは質問にリストされていますが、FreeBSD/system Shellデーモンの答えを探しているときにここに来ました。
以下の行は、「開発」環境でアプリを開始しました。
exec node path/to/start/script.js
以下の行は、「実稼働」環境でアプリを開始しました。
NODE_ENV=production exec node path/to/start/script.js
これを理解するのに時間がかかったので、共有したいと思いました。