![](/img/trans.png)
[英]Why does the python script finish before it gets the results from java if executed through cron job?
[英]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.