はじめに
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を指定する方法を採用しました。この問題については、詳細を調査してわかり次第追記したいと思います。
今回の記事は、以上です。
最後までお読みいただきありがとうございました。
コメント