node.js foreverによるデーモン化

提供: Node.js/JavaScript入門
2014年9月7日 (日) 15:04時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク

node.js npmのforeverとは、アプリケーションの永続化/デーモン化するツールです。HTTPサーバなどをデーモン化できます。プログラムの予期せぬエラーでサービスが停止してしまっても、foreverが起動しなおしてくれます。

読み方

forever
ふぉーえばー

概要

プログラムは、予期せぬエラーで停止してしまいます。

$ node /tmp/a.js
 
/tmp/a.js:7
a
^
ReferenceError: a is not defined
    at Object.<anonymous> (/tmp/a.js:7:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

このようにnodeが停止してしまうと、サービスが提供できなくなってしまいます。

foreverは、以下の機能を提供します。

  • プログラムがエラーを起こして停止したときに、自動的に起動しなおす。
  • プログラムをデーモン化する。

インストール

$ npm install forever

グローバルにインストールする場合は、以下の通りです。

$ sudo npm install -g forever

使い方

コマンドラインオプション

$ /tmp/node_modules/forever/bin/forever -h
help:    usage: forever [action] [options] SCRIPT [script-options]
help:
help:    Monitors the script specified in the current process or as a daemon
help:
help:    actions:
help:      start               Start SCRIPT as a daemon
help:      stop                Stop the daemon SCRIPT
help:      stopall             Stop all running forever scripts
help:      restart             Restart the daemon SCRIPT
help:      restartall          Restart all running forever scripts
help:      list                List all running forever scripts
help:      config              Lists all forever user configuration
help:      set <key> <val>     Sets the specified forever config <key>
help:      clear <key>         Clears the specified forever config <key>
help:      logs                Lists log files for all forever processes
help:      logs <script|index> Tails the logs for <script|index>
help:      columns add <col>   Adds the specified column to the output in `forever list`
help:      columns rm <col>    Removed the specified column from the output in `forever list`
help:      columns set <cols>  Set all columns for the output in `forever list`
help:      cleanlogs           [CAREFUL] Deletes all historical forever log files
help:
help:    options:
help:      -m  MAX          Only run the specified script MAX times
help:      -l  LOGFILE      Logs the forever output to LOGFILE
help:      -o  OUTFILE      Logs stdout from child script to OUTFILE
help:      -e  ERRFILE      Logs stderr from child script to ERRFILE
help:      -p  PATH         Base path for all forever related files (pid files, etc.)
help:      -c  COMMAND      COMMAND to execute (defaults to node)
help:      -a, --append     Append logs
help:      -f, --fifo       Stream logs to stdout
help:      -n, --number     Number of log lines to print
help:      --pidFile        The pid file
help:      --sourceDir      The source directory for which SCRIPT is relative to
help:      --minUptime      Minimum uptime (millis) for a script to not be considered "spinning"
help:      --spinSleepTime  Time to wait (millis) between launches of a spinning script.
help:      --colors         --no-colors will disable output coloring
help:      --plain          alias of --no-colors
help:      -d, --debug      Forces forever to log debug output
help:      -v, --verbose    Turns on the verbose messages from Forever
help:      -s, --silent     Run the child script silencing stdout and stderr
help:      -w, --watch      Watch for file changes
help:      --watchDirectory Top-level directory to watch from
help:      --watchIgnore    To ignore pattern when watch is enabled (multiple option is allowed)
help:      --killSignal     Support exit signal customization (default is SIGKILL)
help:                       used for restarting script gracefully eg. --killSignal=SIGTERM
help:      -h, --help       You're staring at it
help:
help:    [Long Running Process]
help:      The forever process will continue to run outputting log messages to the console.
help:      ex. forever -o out.log -e err.log my-script.js
help:
help:    [Daemon]
help:      The forever process will run as a daemon which will make the target process start
help:      in the background. This is extremely useful for remote starting simple node.js scripts
help:      without using nohup. It is recommended to run start with -o -l, & -e.
help:      ex. forever start -l forever.log -o out.log -e err.log my-daemon.js
help:          forever stop my-daemon.js
help:

アプリケーションの起動

forever start main.js

アプリケーションの停止

forever stop main.js

実行例

ソースコード http.js

var http = require('http');
var server = http.createServer();
 
server.on('request', doRequest);
server.listen(8080);
 
function doRequest(req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write('Hello World\n');
        res.end();
}

実行例

$ /tmp/node_modules/forever/bin/forever start http.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: http.js
$

プロセスは、以下のように実行されています。

$ ps x|fgrep forever
40569  -  Is   0:00.42 /usr/local/bin/node /tmp/node_modules/forever/bin/monitor http.js

関連項目




スポンサーリンク