環境
- macOS Monterey 12.0.1
- DockerDesktop 4.6.1
- Python 3.10.2
この記事を読むとできるようになること
- cronの基本的な理解
- cronの基本的な設定方法と応用的な設定方法
cronとは
cron(UNIX系のOS(MacやLinuxなど)に入っているプログラムの1つ)です。(クロン、あるいはクローン、クーロンと読みます)
プログラムを起動する時間を予め設定しておくことで、cronが自動で定期的にプログラムを実行してくれるようになります。
※Windows環境ではタスクスケジューラが相当します。
設定方法
python3のパスを確認
今回は自動実行するプログラムとして、pythonを使用します。cronではフルパス(絶対パス)で実行プログラムの場所と実行ファイルを指定する必要があります。
そのため、まずはターミナルを開いてpython3のパスをwhichコマンドで確認します。
% which python3
/usr/local/opt/python@3.10/bin/python3
私の場合は、/usr/local/opt/python@3.10/bin/pythonでした。これで、実行プログラムの場所は確認できました。
このパスが間違っていると、外部ライブラリのimportをしている場合にModuleNotFoundErrorが生じる可能性がありますので、注意してください。(特に、macOSはデフォルトでpythonがインストールされているので間違えないように)
cronの設定ファイルを開く
ターミナルで「crontab -e」と入力し、設定ファイルを開きます
% crontab -e
crontabを初めて実行すると、crontab: no crontab for yourname – using an empty one...という表示がでますが、エラーではないので特に気にする必要はありません(設定ファイルがないので、新規作成するというメッセージです)
キーボードの「i」を押してインサートモードにします
cronの設定
基本的な記載方法
分 時 日 月 曜日 実行プログラムのパス 実行ファイルのパス
定期実行例
毎朝8時にtest.pyというファイルを定時実行する例
上記で控えたpython3のパスと実行するスクリプトのパスを指定する
0 8 * * * /usr/local/opt/python@3.10/bin/python3 /Users/nishigakimasaya/git/test.py
分、時、日、月、曜日はそれぞれ次のように指定
項目 | 設定値 |
分 | 0〜59 |
時 | 0〜23 |
日 | 1〜31 |
月 | 1〜12 |
曜日 | 0〜7(0,7=日曜、1=月曜、2=火曜、3=水曜、4=木曜、5=金曜、6=土曜) |
実行タイミングの設定例
// 毎分実行
* * * * *
// 毎日7:12に実行
12 7 * * *
// 毎日21:00分に実行
0 21 * * *
// 毎週火曜の18:00に実行
0 18 * * 2
// 毎平日の18:00と18:10に実行
0,10 18 * * 1-5
// 毎日10分毎に実行
0,10,20,30,40,50 * * * *
// 毎日10分毎に実行
*/10 * * * *
// 毎時5分に実行
5 * * * *
// 毎月1日の9:00に実行(月次)
0 9 1 * *
//
以下のようにすることで、cronの実行結果をログファイルに吐き出すことが可能です。(ログファイルには実行時の日付も入ります)
0 */1 * * * /usr/local/opt/python@3.10/bin/python3 /Users/nishigakimasaya/git/dev/test.py > /Users/nishigakimasaya/Desktop/projects/result_`date +\%Y-\%m-\%d-\%H-\%M-\%S`.log 2>&1
入力終了後に「esc」を押しコマンドモートに切り替えてから『:wq』と入力して、returnキーでcronを保存します(ポップアップが出たら「OK」をクリックします)
cronにファイルのアクセス権を付与
ここまででcronの設定は完了ですが、cronにアクセス権がないとエラーになってしまいます。
ファイルのアクセス権の設定はシステム環境設定から行います
システム環境設定>セキュリティとプライバシー>プライバシー>フルディスクアクセスへ進み、「+」ボタンを押します
アプリケーションの選択画面で[command] + [shift] + [G] を押すと、フォルダへ移動するボックスがあらわれるので、/usr/sbin/cron と入力してcronを追加して下さい。
これでファイルのアクセス権の付与も完了です。
指定したタイミングでPythonスクリプトが実行されているか確認してみてください。
まとめ
いかがでしたでしょうか。本記事では、Pythonのスクリプトを定期的に自動実行する方法について紹介しています。macではcronと呼ばれるツールを使用して毎日手動で実行しているような作業の効率化を実現できます。また、Pythonの学習も併せて行うことができて一石二鳥なので、ぜひ試してみてください。