Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

Raspberry Piでcronを使ってPythonを定期実行する

cron

この記事の内容は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分間隔)」

下記に例を記載します。

  1. 8時~12時の0分、30分にtest.pyを実行する
    00,30 8-12 * * * python home/pi/test.py
  2. 15分毎にtest.pyを実行する
    */15 * * * * python /home/pi/test.py
  3. 起動時に毎回、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にログファイルが生成されるようになります。

cron.log

使い方も簡単ですので、ぜひ活用してみてください。