Syntax Error.

[Sy] node.jsのアプリをforever.jsでdaemon化する手順

2015/07/02

node.jsのアプリをdaemon化して起動しておきたい場合、forever.jsというのを使うといいっぽいのでその手順です。

forever.jsをインストール

グローバルに入れました。

$ npm install forever -g
/usr/local/bin/forever -> /usr/local/lib/node_modules/forever/bin/forever
forever@0.14.2 /usr/local/lib/node_modules/forever
├── colors@0.6.2
├── timespan@2.3.0
├── optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)
├── nssocket@0.5.3 (eventemitter2@0.4.14, lazy@1.0.11)
├── cliff@0.1.10 (eyes@0.1.8, colors@1.0.3)
├── winston@0.8.3 (cycle@1.0.3, stack-trace@0.0.9, eyes@0.1.8, isstream@0.1.2, async@0.2.10, pkginfo@0.3.0)
├── nconf@0.6.9 (ini@1.3.4, async@0.2.9, optimist@0.6.0)
├── utile@0.2.1 (deep-equal@1.0.0, ncp@0.4.2, async@0.2.10, i@0.3.3, mkdirp@0.5.1, rimraf@2.4.1)
├── forever-monitor@1.5.2 (watch@0.13.0, minimatch@1.0.0, ps-tree@0.0.3, broadway@0.3.6)
└── flatiron@0.4.3 (optimist@0.6.0, director@1.2.7, prompt@0.2.14, broadway@0.3.6)

バージョン確認。

$ forever --version
v0.14.2

$ forever listでdaemonとして動作中のプロセスを確認できるらしいので、とりあえず試しにやってみると、

$ forever list
info:    No forever processes running

当然この時点では何もないです。

アプリをdaemon化

アプリのルートディレクトリへ移動して、以下コマンドを実行。

$ forever start app.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

オプション設定しなかったのでデフォルト値になってるよ系のwarningが出てますが、とりあえず今回は無視して続けます。

起動できたみたいなので、もう一度リストを確認すると、

$ forever list
info:    Forever processes running
data:        uid  command             script forever pid  id logfile                        uptime
data:    [0] ysML /usr/local/bin/node app.js 1903    1905    /home/mitsuo/.forever/ysML.log 0:0:0:15.754

さっきと変わってます。うまくアプリのプロセスをdaemon化できてるようです。

ちなみにプロセスをnodeでgrepかけてみると、

$ ps ax | grep node
1903 ?        Ssl    0:00 /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/monitor app.js
1905 ?        Sl     0:00 /usr/local/bin/node /var/www/analytics/app.js
1914 pts/0    S+     0:00 grep node

という感じで、daemon化したアプリのスクリプトとforever/bin/monitorapp.jsという死活監視をしてくれてるだろうスクリプトの2つが動いてるのが確認できます。