centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する
はじめに
node.jsをデーモン化するにはforever、pm2、supervisorなどいろいろありますが
centos7になってから標準のスタートアップスクリプトでもとくに問題がでていないので紹介します
プロセスマネージャーに一般に必要とされる機能
以下の機能は標準のsystemdで満たしています
- ターミナルからプロセスの切り離し
- マシン再起動による自動起動
- プロセスダウンによる自動再起動
systemdではやってくれない機能
- マルチコアスケールアウト(PM2)
設定ファイルサンプル
- サーバー名称:sample-server
- 実行ユーザー:centos
ディレクトリ /etc/systemd/system/ の下に サーバー名称.serviceというファイルを作ります
/etc/systemd/system/sample-server.service
[Unit]
Description=sample server
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/bin/node /home/centos/server/app.js
WorkingDirectory=/home/centos/server
KillMode=process
Restart=always
User=centos
Group=centos
[Install]
WantedBy=multi-user.target
起動、終了、再起動コマンド
以下のコマンドが使えるようになります。
起動と終了が問題なくできれば自動起動登録すればマシン起動時に自動で立ち上がります
自動起動登録
systemctl enable sample-server
起動
systemctl start sample-server
終了
systemctl stop sample-server
再起動
systemctl restart sample-server
その他
foreverはそのまま置き換え可能です
pm2はクラスタ化によるhttpのロードバランス機能が必要な時に選択すればよいと思います
ログについて
systemdをつかって標準出力に出力した場合、journalctlコマンドで内容を確認できる
標準ではlessが使われるがtailを使いたい場合は-fオプションを使うとログを目視で監視できる