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してみると自動で新しいプロセスが立ち上がる。

参考


Related #raspberry pi