私のcrontabジョブが正しく書かれたかどうかを知りたいです。 VPSで実行したいのですが、モニタリングは事実上不可能です。もう心配しないで、私のクローンの仕事は次のようになります。
# cd into directory at 2:57 AM
57 2 * * 1-5 cd /folder_name
# activate the virtual environment
58 2 * * 1-5 . env/bin/activate
# run the main script
59 2 * * 1-5 python main.py
# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C
また、システム時計を東部時刻に変更しました。これは、cronジョブが東部タイムゾーンを使用して実行されることを意味しますか?
答え1
いいえ、cron
シェルではありません。スクリプトを書く:
#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py
実行可能にしてからエントリを指定してくださいcrontab
。
57 2 * * 1-5 /path/to/script
その後、スクリプトは毎週月曜日から金曜日までのローカルタイムゾーン(コンピュータが考えるタイムゾーン)の2時57分に実行する必要があります。メールシステムを正しく設定すると、結果(存在する場合)がメールに送信されます。
答え2
クローン操作が間違って書かれています。各クローン操作には独自の環境があります。つまり、そのcd
コマンドは後続のクローン操作とは無関係です。
仮想環境では、仮想環境を手動で有効にして直接which python
実行することをお勧めします。これにより、python
その仮想環境内で常に実行できるフルパスが提供されます。 cronでこのPythonパスを使用する必要があります。
最終的なクローンタブは次のようになります。
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
後でプロセスを終了する場合、この問題を解決する最も一般的な方法はpidfileを使用することです。これを行うのに役立ついくつかのPythonライブラリがあります。 この回答このトピックについては非常に徹底していますが、crontabの問題とは実際には関係ありません。