簡體   English   中英

Crontab 未在 Ubuntu 上執行 Python 腳本

[英]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.

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