趣味的なIT・ネットの話題

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 server
After=syslog.target network.target

[Service]
ExecStart=/usr/local/bin/node /home/pi/kt/app.js
Restart=always
RestartSec=10                       # Restart service after 10 seconds if node service crash$
StandardOutput=syslog               # Output to syslog
StandardError=syslog                # Output to syslog
SyslogIdentifier=nodejs-kt
User=root
Group=root

[Install]
WantedBy=multi-user.target

保存したところ、systemctlコマンドで認識できました。

pi@raspberrypi:~ $ sudo systemctl list-unit-files --type=service | grep node
kmod-static-nodes.service              static  
node-kt.service                        disabled

 

systemctlのstartからスタートでき、stopで停止できました。

pi@raspberrypi:~ $ sudo systemctl start node-kt
pi@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 node
pi@raspberrypi:~ $ sudo systemctl stop node-kt

enableするとよく分かりませんがどこかに登録されたようです。

pi@raspberrypi:~ $ sudo systemctl enable node-kt
Created 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の記法も直感的でよいと思います。

 

 


Facebooktwitterpinterestlinkedinmail
納得したらすぐにシェア!