この記事の内容はRaspberry Pi 4と3の両方で動作確認済みです
ブログ管理者のP.Hです!
今回は、スクリプトを定期実行してくれるcronというサービスについて紹介したいと思います。起動時に毎回実行したい、指定した時間にスクリプトを実行したいという場面は多いと思います。そんなときに、このcronという機能はとても役に立ちます。
今回はpytnonプログラムを定期実行する方法を紹介します。pythonだけでなくシェルスクリプト等も定期実行することが可能です。
cronサービスが動いているか確認
デフォルトでcronサービスは動いていると思いますが、念のため確認しておきましょう。chkconfigをインストールしていない場合はsudo apt-get install chkconfig
コマンドでインストールしてください。
$ chkconfig cron
cron on
と表示されていれば、問題ありません。cron off
となっている場合は、下記コマンドでcronサービスを有効にしてください。
sudo systemctl enable cron
cronの設定方法
まず、下記のコマンドでcrontabを起動し、定期実行したい時間とそのスクリプトを書き込み設定を行います。
$ crontab -e
crontabの書き方
下記の内容を左から順に記載してきます。各項目はスペースを開けて記載します。
- 分[0-59] 時[0-23] 日[1-31] 月[1-12] 曜日[0-7]「実行内容」
また、下記のような書き方もできます。
- 複数指定 ⇒ カンマで区切ります。「0,30」
- 範囲指定 ⇒ ハイフンを使用します。「8-17」
- 間隔 ⇒ 右記のように記載します。「*/10(10分間隔)」
下記に例を記載します。
- 8時~12時の0分、30分にtest.pyを実行する
00,30 8-12 * * * python home/pi/test.py - 15分毎にtest.pyを実行する
*/15 * * * * python /home/pi/test.py - 起動時に毎回、test.pyを実行する
@reboot python /home/pi/test.py
プログラムのパスはフルパスで記載しておいたほうが安全です。
test.pyは、以下のコードを使用しました。test.pyが起動した時刻をcron_test.txtに保存するだけです。
from datetime import datetime with open("cron_test.txt", "w") as f: f.write("[{}] cron_test".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
エラー時のログ
cronがうまく動かいない場合が出てきたときにログが出力されるようにしておくと、問題解決に役立ちます。 下記コマンドで、rsyslog.confを編集して、ログが出るようにします。
$ sudo nano /etc/rsyslog.conf
#cron...となっている部分の#を削除して、再起動します。ます。これで、/var/log/cron.logにログファイルが生成されるようになります。
使い方も簡単ですので、ぜひ活用してみてください。