以前SoftEtherVPNを手軽にSystemdでデーモン化する方法をご紹介しましたが、実は、最近よく使われるNode.jsで書いたサーバープログラムも、Systemdを使うと簡単にデーモン化できるようです。
centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する – Qiita
Node.jsはjavascriptのサーバーサイド版の言語・実行環境で、ほぼjavascriptと同じ言語を使ってサーバー側の処理を書くことができます。
Node.jsのライブラリにも”forever”というプログラムをデーモン化してくれるライブラリがあるのですが、OS起動時と同時に実行させたりする際はちょっと不安が残ります。
起動時にうまくNode.js製のサーバーをデーモンとして動作させる方法がないか探したところ、なんとSystemdのみで実現できるとのことだったので、実際に試してみました。
nodeのプログラムをsystemdを使ってデーモン化するには、
/etc/systemd/system/デーモン名.service
のような名前でファイルを作り、下記のように設定を書き込みます。
[Unit] Description=node server #任意の説明 After=syslog.target network.target [Service] Type=simple ExecStart=/usr/bin/node /path/to/Node.jsProgramPath #記法:ExecStart=node.js本体のパス node.js向けに書いたサーバープログラムのパス WorkingDirectory=/path/to/ #作業ディレクトリの場所(スクリプト実行時にカレントディレクトリになっていて欲しい場所) KillMode=process Restart=always User=centos #node.jsプログラム実行ユーザー Group=centos #node.jsプログラム実行ユーザー [Install] WantedBy=multi-user.target
上記のような内容でファイルを保存したら後はお決まりの
systemctl enable デーモン名 systemctl start デーモン名
これだけでnode.jsのプログラムがデーモン化され、OS起動時の自動起動にも登録されます。
Systemdはファイルの記法がわかりづらくて嫌煙されがちな印象でしたが、いろんなプログラムをいとも簡単にデーモン化できてしまうあたり、もしかするとかなり優秀なのかもしれません…