headlessで運用するRapsberry Piのシステムを開発中です。基幹となるサービスがnodeで動くので、システム起動時に自動的に起動するように設定してみました。RaspbianがWheesyまでのときはinsservでよかったのですが、Jessieからはsystemdに変わっています。insservでも起動できるのは確認しているのですが、折角ですのでsystemdでの起動に挑戦してみます。参考にしたのはこちら。Systemdを使ってさくっと自作コマンドをサービス化してみる – Qiita Node-RED.service まずserviceファイルを書きます。
pi@raspberrypi:~ $ sudo nano /etc/systemd/system/node-kt.service
rootで起動するのがセキュリティ的に望ましくないことは分かってはいるのですが、システムレベル、ハードウェアレベルにアクセスしないといけない関係上、やむを得ずrootにしています。
[Unit]Description=Node.js kawacchi timer serverAfter=syslog.target network.target[Service]ExecStart=/usr/local/bin/node /home/pi/kt/app.jsRestart=alwaysRestartSec=10 # Restart service after 10 seconds if node service crash$StandardOutput=syslog # Output to syslogStandardError=syslog # Output to syslogSyslogIdentifier=nodejs-ktUser=rootGroup=root[Install]WantedBy=multi-user.target
保存したところ、systemctlコマンドで認識できました。
pi@raspberrypi:~ $ sudo systemctl list-unit-files --type=service | grep nodekmod-static-nodes.service static node-kt.service disabled
systemctlのstartからスタートでき、stopで停止できました。
pi@raspberrypi:~ $ sudo systemctl start node-ktpi@raspberrypi:~ $ ps -ax | grep node 1280 ? Ssl 0:02 /usr/local/bin/node /home/pi/kt/app.js 1342 pts/1 S+ 0:00 grep --color=auto nodepi@raspberrypi:~ $ sudo systemctl stop node-kt
enableするとよく分かりませんがどこかに登録されたようです。
pi@raspberrypi:~ $ sudo systemctl enable node-ktCreated symlink from /etc/systemd/system/multi-user.target.wants/node-kt.service to /etc/systemd/system/node-kt.service.
再起動したところ、プロセスが走っていました。外部からこのnodeへのアクセスも成功しています。
pi@raspberrypi:~ $ ps -ax | grep node 692 ? Ssl 0:03 /usr/local/bin/node /home/pi/kt/app.js 937 pts/0 R+ 0:00 grep --color=auto node
以前のinitスクリプトを各方式よりも簡単でわかりやすいように感じました。serviceの記法も直感的でよいと思います。 “””