怠惰になるために本気出す

電子工作で色々作ってます

【Raspberry pi】プログラム(python)を自動起動

以前Sesameをweb apiで叩いて解錠・施錠するシステムを構築しました。
iotblog5296.hatenablog.com

自宅のネット回線をモバイルWiFiで運用していて通信が不安定だったり月末に通信制限になった際にラズパイのプログラムがエラーで止まってしまうことがありました。
ラズパイにはシステムが立ち上がると指定したプログラムを自動的に起動することができるようなので、エラーで止まってしまった際はそれを利用してラズパイの電源を入れ直すと自動的にプログラムが走るようにしました。


crontabを利用する

rikoubou.hatenablog.com

色々自動起動かける方法があるようですが、いくつか試してみてうまく動いたcrontabを使う方法でいきました。

ターミナルを起動して「crontab -e」と入力

よくわからない文字列が表示されますが一番下の方に起動したいプログラムを追加します。

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

@reboot python3 /home/pi/Desktop/Sesame3.py #自動起動させたいプログラムを選択


追加したら上書き保存します。
ターミナルを起動して「reboot」と入力して再起動かけてみてください。立ち上がると画面上には表示されないですがバックグラウンドで選択したプログラムが動作しています。

まとめ

これでエラーで止まってしまった場合いちいちプログラムを人力で起動しなおさずに電源を入れ直すだけで動くようになりました。
ただ、パソコンでも必ずシャットダウンするように本当はラズパイもシャットダウンするか再起動かけた方が良いです

とりあえず付け焼刃で凌いでいる感は否めないですがゆくゆくはpython上でFelicaを読み取った際にwifiが切断されていると再起動かけるプログラムに変えたいです。
そもそもpython上でそんなことできるのでしょうか…?
……いつか…やりたいですね…


施解錠に普段使用しているFelicaを変更しようと思ってラズパイを立ち上げたものの、このプログラムも数年前に作ったものでどういうシステムを使ってどう動いているのか1ミリも記憶がなかったためFelicaIDmを変えればいいだけなのに半日ぐらい潰して探しました。


同じ轍を踏まないよう備忘録して残しておきます。