Crontab不在Ubuntu

时间:2016-03-30 23:06:42

标签: python ubuntu cron crontab

我有一个包含以下代码的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有关。有什么想法吗?

EDIT1:

在调试并查看日志之后,我可以像我设置的那样每分钟验证cron是否实际执行了命令export DISPLAY=:0; /usr/bin/python /home/polo/git-repositories/takebreak/takebreak.py,但出于某种原因,这个命令应该发送系统通知,没有这样做。 有什么想法吗?

EDIT2:

解决方案是添加一些地址总线的东西(忘记确切的代码),我发现在另一篇文章中,最终修复它。不幸的是,这里没有任何答案或评论有助于解决问题,但不管多么感谢!

1 个答案:

答案 0 :(得分:1)

最有可能的问题是,从notify-send开始运行时,$PATH不在crontab。首先,弄清楚它的存储位置:

$ 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])