Raspberry PiでIoTなIT:スタートアップ時にsystemdを使ってnodeを自動起動させる

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の記法も直感的でよいと思います。  “””

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です