crontab ジョブが正しく記述されているかどうか気になっています。VPS で実行したいのですが、監視は実際には不可能です。さっそく、私の cron ジョブを以下に示します。
# 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
cron ジョブが正しく記述されていません。すべての cron ジョブには独自の環境が割り当てられるため、このcd
コマンドは後続の cron ジョブには影響しません。
仮想環境に関しては、仮想環境を手動でアクティブ化してから実行することをお勧めしますwhich python
。これにより、その仮想環境で常に実行される への完全なパスが提供されますpython
。この Python パスを cron で使用する必要があります。
最終的な crontab は次のようになります。
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
後でプロセスを強制終了する場合、この問題の最も一般的な解決策は pidfile を使用することです。これを行うのに役立つ Python ライブラリがあります。 この回答その主題についてはかなり詳細ですが、crontab の質問とはあまり関係ありません。