express のウェブアプリを作っていたのですが、実行しながらソースの修正を自動で反映したかったので、 forever を使ってみました。
環境
- Node.js: v8.9.4
- forever: 0.15.3
インストール
グローバルではなくて、ローカルにインストールしました。
--save-dev
をつけて、開発用パッケージとして package.json に追加しました。
$ npm install forever --save-dev
起動
app.js スクリプトをデーモンとして起動してみました。
$ 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
表示
実行中の forever スクリプトを表示(確認)してみました。
$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [0] j4AD /usr/local/bin/node app.js 248 254 /home/user/.forever/j4AD.log 0:0:0:14.878
プロンプトに戻らないので、 Ctrl + c でプロンプトに戻るみたいです。
停止
デーモンのスクリプトを停止してみました。
$ forever stop n
n
はプロセスの番号みたいです。
上の forever list
の [0]
の番号がそれみたいです。
スクリプト名や id や uid や pid も指定することができるようです。
オプション
-w
-w
のオプションをつけると、ファイルの変更を監視して、自動で再起動してくれるみたいです。
$ forever start -w app.js
これを使いたかったのです。
-l, -a
-l
のオプションをつけると、ログをファイルに保存してくれるみたいです。
-a
のオプションをつけると、すでにファイルがあってもエラーにならなくなります。
$ forever start -l forever.log -a app.js
~/.forever/forever.log として保存されました。 カレントディレクトリーを考慮してくれないようでした。
このログファイルにはスクリプトの標準出力、標準エラー出力も出力されるようでした。
-o, -e
標準出力、標準エラー出力をそれぞれログに出力することもできるようです。
-o
のオプションは標準出力、 -e
のオプションは標準エラー出力のようです。
$ forever start -o stdout.log -e stderr.log app.js
こちらはカレントディレクトリーにファイルが作成されました。
終わり
最初、 StrongLoop Process Manager をインストールしようとしました。 ですが、インストールにけっこう時間がかかり、エラーも出て、諦めました。 機能が多いようなので、仕方ないのかもしれません。
これに対して forever はシンプルなコマンド・ライン・インターフェース・ツールのようです。 インストールもすぐにエラーもなく終わりました。 シンプルに使えて便利でした。
StrongLoop Process Manager と pm2 と forever の機能の比較表がありました。
開発ではクライアントサイドの HTML, CSS, JavaScript を修正していたのですが、これだけなら修正を反映するのに、プロセス・マネージャーを使う必要はなかったみたいでした。 サーバーサイドのソースの修正を反映するのに使うと良さそうです。