AWS IoTへのデータ送信スクリプトをsystemdで自動起動するようにする
先日の記事にてBME280センサ情報をAWS IoTで管理するようにした。
その際、tmuxを用いてプロセスを維持するようにしていたが、エラー時や再起動した際には手動で立ち上げ直す必要があった。
そこでsystemdを使って自動起動できるように設定した。
AWS IoTに送信するMQTTクライアント起動用のコマンドをシェルスクリプトに記述。
# awsiot/samples/script.sh
#!/bin/sh
python myBasicPubSub.py \
--endpoint {id}.iot.ap-northeast-1.amazonaws.com \
--rootCA ./cert/rootCA1.pem \
--cert ./cert/id-certificate.pem.crt \
--key ./cert/id-private.pem.key \
-t piz/bme280
systemdのサービスとしてシェルスクリプトを実行するように設定。
# /etc/systemd/system/awsiot.service
[Unit]
Description = awsiot bme280
[Service]
WorkingDirectory=/home/pi/awsiot/samples/
ExecStart=/home/pi/awsiot/samples/script.sh
Type=fork
Restart=always
[Install]
WantedBy=multi-user.target
- サービス再読み込み
sudo systemctl daemon-reload
- 起動
sudo systemctl start awsiot.service
- 自動起動を有効に
sudo systemctl enable awsiot.service
- ステータス確認
sudo systemctl status awsiot.service
● awsiot.service - awsiot bme280
Loaded: loaded (/etc/systemd/system/awsiot.service; enabled; vendor preset: enabled)
Active: active (running)
- 起動ログ確認
journalctl -u awsiot
試しにプロセスをkillしてみると自動で新しいプロセスが立ち上がる。