node.jsに関する投稿が続いていますね。先日構築した Side Effect Studioサイト で使用したものを整理・共有しようとすると、node.js関連の投稿ばかり続いてしまいます。早く整理して他の内容も見ていかなければなりません。

昨年、 UpstartとMonitでnode.js Applicationをサービスする という投稿をしたことがありますが、これはかなり有用である一方、管理面で非常に面倒な点があります。upstartスクリプトを作成したり、monitにルールを適用したりする作業は少し手間がかかります。他に代わりとなる手段を知らなかったのでUpstartとMonitを使用していましたが、その投稿以降、nodeアプリのインスタンスを管理してくれる forever というツールが公開されました。

forever はnpmを使用して npm install forever コマンドで簡単にインストールが可能であり、非常にシンプルなコマンドでnode.jsで作成したアプリを実行し、予期せず終了した際に再実行したり、stdoutをログファイルとして残したりといった管理をしてくれるツールです。 使用してみると多少のバグはありますが、既存のUpstartとMonitの組み合わせに比べて操作性が非常に便利で、node.jsアプリの管理はすべてforeverに切り替えました。

usage: forever [start | stop | stopall | list | cleanlogs] [options] SCRIPT [script options]

options:
start          start SCRIPT as a daemon
stop           stop the daemon SCRIPT
stopall        stop all running forever scripts
list           list all running forever scripts
cleanlogs      [CAREFUL] Deletes all historical forever log files


foreverの使い方は上記の通りです。 登録したいスクリプトを forever start app.js のように実行すれば完了です。プロセスを確認するとforeverに関するプロセスが別個に存在し、実行したapp.jsプロセスが終了した場合、自動的に再実行してくれます。現在動作しているスクリプトを確認するには forever list を実行します。

foreverにnodeアプリを登録した画面


プロセスを終了する場合は、先に表示された番号を使用して forever stop 番号 を使えば良いです。 一目でどのプロセスを現在使用しているか把握でき、ログファイルを自動的に接続してくれるため、非常に便利です。

登録されたnodeアプリを終了した画面




少し使用してみた経験では、ある程度安定しているようです。(アクセス者がそれほど多くないため、致命的なエラーが発生する確率が低く、正確な判断ではありませんが、なんとなく...)ただ、バグがあるのか、forever startでアプリを登録した際、プロセスは正常に起動したにもかかわらずforeverに登録されず、リストに表示されないケースがあります。何度かテストを行いましたが、規則性は見つけられませんでした。そのような場合は、該当スクリプトとそのforeverに対するプロセスを強制終了してから再度登録する必要があります。この点以外は、管理・使用ともに便利で非常に優れていると思います。


参考資料 : http://blog.outsider.ne.kr/590

AD