簡體   English   中英

為什么 Python 腳本可以從 CLI 運行,但從 cron 作業調用時卻不能運行?

[英]Why does a Python script work from the CLI, but not when called from a cron job?

我創建了一個 Python 腳本,我想通過 Ubuntu 服務器上的 cronjob 每天運行它。

這是從命令行運行此腳本的方式:

python  /home/username/public_html/IDM_app/manage.py cleanUpPosts  

從 CLI 調用時,腳本運行良好。
但是,當我嘗試通過 cronjob 運行腳本時,腳本無法正常運行。 日志文件顯示正在請求腳本,但未顯示腳本未正確執行的原因。

我在腳本中添加了 Python 日志記錄。 當從 CLI 調用腳本時,日志記錄會正確發生。 從 cron 調用時,python 日志記錄無法寫入其日志文件。

我懷疑問題是 cronjob 在請求腳本時沒有運行 shell。

我似乎找不到 cron 守護進程記錄錯誤的任何地方。

我創建了/var/log/cron.log
然而,這似乎並沒有更新。

由於我認為問題源於 ENV 變量,因此我嘗試讓 cronjob 為自己顯示 ENV。

這是我的 crontab 的樣子:
$ crontab -u 用戶名 -e

m h  dom mon dow   command  
43 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts  
43 17 * * * python /home/username/public_html/IDM_app/manage.py cleanUpPosts  
45 21 * * * echo "-----------------"; echo "import os; print os.environ" | python  
47 21 * * * /bin/sh echo "------with shell-------"; echo "import os; printos.environ" | python  
MAILTO=bryanw@nowhere.com  

我以為它會輸出到屏幕上,但它沒有。 ENV 變量也會輸出到哪里?

無論如何,這里是日志文件:

# tail -n 5 /var/log/*.log   
==> /var/log/auth.log <==  
Jan 13 17:43:01 servername CRON[7901]: pam_unix(cron:session): session opened for user username by (uid=0)  
Jan 13 17:43:01 servername CRON[7902]: pam_unix(cron:session): session opened for user username by (uid=0)  
Jan 13 17:44:48 servername su[7909]: Successful su for root by username  
Jan 13 17:44:48 servername su[7909]: + /dev/pts/0 username:root  
Jan 13 17:44:48 servername su[7909]: pam_unix(su:session): session opened for user root by username(uid=1000)  

==> /var/log/bootstrap.log <==  

==> /var/log/cron.log <==  

==> /var/log/daemon.log <==  

==> /var/log/dpkg.log <==  

==> /var/log/kern.log <==  

==> /var/log/lpr.log <==  

==> /var/log/mail.log <==  

==> /var/log/mysql.log <==  

==> /var/log/pycentral.log <==  

==> /var/log/user.log <==  

我還應該嘗試什么才能確定我的腳本運行不正常的原因?

crontab 可能找不到 python 可執行文件,盡管它可以在 CLI 上找到,因此您需要記下 python 的完整路徑。 你得到的一樣

which python

Crontab 為腳本提供了一個環境,該環境與普通用戶環境不同。

3 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts  

這條線似乎是錯誤的。 看來您正在運行python ,就好像它是一個 shell 腳本一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM