はいどうもこんにちは、20代怠け者(@20sInvest)です!

先日から、MacにPython3を導入する方法や備忘録・メモなどをこのブログにまとめています。

 

さて、Python3で作ったプログラムを自動実行する場合、UnixベースであるMacならやはりCrontabが便利です。

ただ、Macの環境でPython3を自動実行しようとした場合、Crontabに設定する記述方法に少しクセがありました。

もしかしたらエンジニアの人には当たり前のことなのかもしれないけれど、情報不足で少しつまづいた所があったので「Crontabを使ってMacでPythonを自動実行する設定方法と注意点」について、シェアしておきますね。

同じく自動実行でつまづいている方はご参考までにどうぞ。

 

  Crontabの仕組み、設定方法などについては、他に詳しいサイトがたくさんあるので割愛しています。

MacとPython3…という状況での設定時に注意しておきたいことについてのみに絞って、この記事では解説しています。

【記述】】Mac+CrontabでPythonを自動実行する設定

さて、その実際の記述方法はこんな感じです。 (1時間毎にCrontabを実行する場合)

0 * * * * [Python3のフルパス] [実行するファイル名のフルパス] > [実行結果やエラーを出力するログファイルのフルパス] 2>&1

 

例えば、インストールしたPython3.8で、デスクトップに置いたtest.pyというプログラムをCronで実行しようとした場合、こうなります。

0 * * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/username/Desktop/test.py > /Users/username/Desktop/exec-error.log 2>&1

 

実行結果やエラーログを出力するログファイルの部分は、必要なければ「 > 」以降は記述しなくてもOKです。

ただ、Crontabで実行しようとして上手く行かないときは、画面上にエラーメッセージ等が表示されないので、原因切り分けがけっこうめんどくさくなります。

なので、ひとまずログファイルに出力する設定にしてしまったほうが良さげですね。

【注意】Mac+CrontabでPythonを自動実行する際の注意点

注意点としては、Cronで実行しようとする場合、「実行するコマンド」と「実行するプログラムファイル」の両方をフルパスで指定しないと動いてくれないという点です。

通常、コマンドを実行する場合は「python ファイル名」で実行しますが、Crontab内ではこの通りでは動いてくれません。

どこのどのフォルダにある「pythonコマンド」で、どこのどのフォルダにある「プログラムファイルを実行しないといけないのか」まで細かく指定してあげないといかんのですね。

Crontabは基本はすべてフルパスで実行する!

…という前提で覚えておくと、こうした部分で引っかかることはなくなるかもです。

【参考】MacにインストールされるPythonのフルパス

参考までに、デフォルトでインストールされているPython2と、後に新規インストールした場合のPython3のフルパスも以下にまとめておきますね。

ご参考までに!

MacにデフォルトでインストールされているPython2のフルパス

/usr/bin/python

Python3のフルパス (バージョンにより番号が異なるので注意)

/Library/Frameworks/Python.framework/Versions/3.8/bin/python3