Node.js の forever を使ってみました

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 の機能の比較表がありました。

Compare with pm2 and Forever

開発ではクライアントサイドの HTML, CSS, JavaScript を修正していたのですが、これだけなら修正を反映するのに、プロセス・マネージャーを使う必要はなかったみたいでした。 サーバーサイドのソースの修正を反映するのに使うと良さそうです。

参考