[英]Crontab not executing Python script on Ubuntu
我有一個包含以下代碼的 Python 腳本:
import subprocess
import sys
default = "Take a 20 second break - look at least 20 feet away!"
message = sys.argv[1] if len(sys.argv) > 1 else default
def sendmessage(message):
subprocess.Popen(['notify-send', message])
return
sendmessage(message)
稱為takebreak.py
,它將發送系統通知。
當我嘗試使用crontab
使其自動化時,如下所示:
* * * * * /usr/bin/python /home/polo/git-repositories/takebreak/takebreak.py
它不起作用。 運行命令
/usr/bin/python /home/polo/git-repositories/takebreak/takebreak.py
在終端中確實有效,這意味着它不是文件位置問題,而是與cron
。 有任何想法嗎?
編輯1:
在調試和查看日志后,我可以驗證 cron 確實在執行命令export DISPLAY=:0; /usr/bin/python /home/polo/git-repositories/takebreak/takebreak.py
export DISPLAY=:0; /usr/bin/python /home/polo/git-repositories/takebreak/takebreak.py
每分鍾就像我設置的那樣,但由於某種原因,這個命令雖然應該發送系統通知,但並沒有這樣做。 有任何想法嗎?
編輯2:
解決方案是添加我在另一篇文章中找到的一些地址總線的東西(忘記確切的代碼),最終修復了它。 不幸的是,這里的答案或評論都沒有幫助解決問題,但無論如何都感謝!
最有可能的問題是,從crontab
運行時, notify-send
不在您的$PATH
。 首先,弄清楚它的存儲位置:
$ which notify-send
/usr/bin/notify-send
對我來說,它在/usr/bin
。
在crontab
文件 ( crontab -e
) 的頂部,設置$PATH
:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
如果您想包含之前可能已經設置的任何$PATH
(更安全),請改為執行以下操作:
PATH="${PATH}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
如果它沒有安裝在/usr/bin
,請確保這包括安裝命令的目錄。
當然,另一種選擇是簡單地在 Python 腳本中指定完整的命令路徑:
subprocess.Popen(['/usr/bin/notify-send', message])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.