使用 Cron/Python

使用 Cron/Python

我想知道我的 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始終在該虛擬環境中運行的完整路徑。你應該在你的 cron 中使用這個 python 路徑。

最終的 crontab 應該看起來像這樣:

0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py

至於稍後終止進程,解決此問題最常見的方法是使用 pidfile。有一些 Python 函式庫可以幫助你做到這一點。 這個答案關於這個主題相當徹底,但與 crontab 問題並沒有真正相關。

相關內容