Node.jsでforeverを使ってスクリプトの起動を永続化する

  • 10
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こちらを参考にしました
http://pppurple.hatenablog.com/entry/2016/01/24/144208

まずテスト用のサーバーを書きます。普通にnode hoge.jsとしてブラウザからhttp://localhost:8090に一度アクセスすると、初回はHello forever!が表示され、もう一度リロードすると何も表示されないはずです。

var http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello forever!\n');
  dummy();
}).listen(8090, '127.0.0.1');

ここでforeverの出番です。まずグローバルにforeverをインストール。

sudo npm install -g forever

そして起動。

forever hoge.js

このようにして起動するとコンソールにはエラーログが出ますが、何度でも立ち上がり永続化されていることが確認できます。これを停止する時はCtrl-CでOK。バックグラウンドで起動する時は以下のようにstartで実行します。

forever start hoge.js

ログファイルは

forever list

で見られる一覧のlogfileのところにパスが書いてあるのでそこから見れる。永続化を停止する時はstopを使う。

forever stop [UID]

もしくは起動時のディレクトリに移動してファイル名を指定してstopでもいい。

forever stop hoge.js

何らかの理由でデーモンが停止している場合に再起動する場合は

forever restart [UID]

マシンが再起動した時に常に永続化したい場合は/etc/rc.localなどにforever start hoge.jsなどと書いておけば良い。気をつけるポイントは、/etc/rc.localはrootとかで動いていると思うので、forever listでは起動状況は確認できない。sudo forever listなどとして確認してみよう。

その他メモ

SysVinit互換のスクリプトを生成するinitd-forever。
いろいろと問題があるようですがSysVinit互換のスクリプトならこれ
http://dev.classmethod.jp/server-side/daemonize-nodejs-by-initd-forever/

CentOS7標準のsystemdでデーモン化する方法もある。
systemdの場合は問題のあるスクリプトは永続化できるのか確認していないが、こちらの方がなれていて良い。
http://qiita.com/you21979@github/items/588bddb59378ce7303a2

多分こんな感じでいけるようだ

systemctl enable sample-server
systemctl start sample-server
systemctl stop sample-server
systemctl restart sample-server