Python

MacでPythonを時間指定して自動で実行する方法|cronの使い方

Python

はじめに

MacでPythonを時間指定して自動で実行する方法について解説します。

その方法とはcronです。

この記事のゴール

  • cronでpythonのスクリプトを時間指定して実行する方法を身につけられること

cronとは?

cronとは、UNIX系OSで標準的に利用される常駐プログラムの一種です。利用者の設定したスケジュールに従い、指定されたプログラムを定期的に実行する機能をもちます。

cronの設定方法

PATHの取得

まずpython3のPATHを取得します。以下をターミナルで実行してください。

echo $PATH

すると以下のようなものが表示されると思いますのでコピーしてください。

cronのPATH設定

次にcronを設定していきます。

ターミナルで以下を実行してください。

crontab -e

そして「i」を押してインサートモードに切り替えてください。

すると画面下の表示がINSERTになると思います。

そして、以下のように記述してください。

PATH=コピーした内容

例としては、このようになります。

PATH=/Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

そして次の行から実際に時間指定して動かしたいpythonスクリプトを指定していきます。

cronの設定

入力書式は、以下のようになります。

  • 分 時 日 月 曜日 実行ファイルの絶対パス+実行ファイル名.py
  • 大切なのは、スペースを忘れないこと
  • また、入力しない箇所は、「*」を入れること(ワイルドカード)

毎朝9時にPython3でhello.pyというファイルを定時実行するには次の通り。

0 9 * * * python hello.py

分、時、日、月、曜日はそれぞれ次のように指定します。

  • 分 0〜59
  • 時 0〜23
  • 日 1〜31
  • 月 1〜12
  • 曜日 0〜7(0,7=日曜、1=月曜、2=火曜、3=水曜、4=木曜、5=金曜、6=土曜)
  • 曜日に関しては、1-5と入力することで平日のみの指定も可能です。

例えば以下のようになります。

毎日9:30に実行する場合:30 9 * * * python hello.py
毎週月曜の12:15に実行する場合:15 12 * * 1 python hello.py
平日の12:15に実行する場合:15 12 * * 1-5 python hello.py

入力終了は、以下のように入力します。

  • 「esc」を押しコマンドモードに切り替え
  • 『:wq』と入力して、returnキーでcronの保存
PATH=/Users/username/opt/anaconda3/bin:/Users/username/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
0 12 * * 1-5 python /Users/username/Desktop/hello.py

この方法に至るまでに解決した問題点

私が、cronを使っていてぶつかった問題点は以下でした。そこでPATHを指定して記述する方法をとりました。

  • python2とpython3が存在しており、cronでpythonを実行しようとするとpython2が立ち上がってしまうこと
  • python3のソースを指定することで、実行できるとのことでしたが、私はできなかった(原因不明)

問題の詳細

python3の位置はターミナルで以下のように調べることができます。

which python3

それで表示されたものを添付し、python3を実行してから、対象のpyファイルを指定して実行できるはず・・・なのですが、私は、できなかったです。原因不明・・・

このようにcrontabを編集し、保存使用とするのですが、

40 * * * * /Users/username/opt/anaconda3/bin/python3
/Users/username/Desktop//ni.py

以下のように表示されていましいます。

"/tmp/crontab.BzAbHnMssq":1: bad minute
crontab: errors in crontab file, can't install
Do you want to retry the same edit? 

そこで、PATHを指定する方法を採用しました。この問題については、詳細を調査してわかり次第追記したいと思います。

今回の記事は、以上です。

最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました