【发布时间】:2025-12-08 18:45:02
【问题描述】:
我有一个包含以下代码的 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:
解决方案是添加一些地址总线的东西(忘记确切的代码),我在另一篇文章中找到了,最终修复了它。不幸的是,这里的答案或 cmets 都没有帮助解决问题,但无论如何感谢!
【问题讨论】:
-
我的 crontab 确实在运行,但由于某种原因,有问题的命令不起作用。只输入
* * * * * export DISPLAY=:0; /usr/bin/notify-send blah不会显示任何内容 -
我很难理解上面代码中的解决方案。我应该在我的主代码中添加一个 DBUS_SESSION_BUS_ADDRESS 吗?地址是什么?
-
首先,我的建议是运行
env|grep DBUS并将其硬编码在crontab 中,就像Will 的回答中的$PATH一样。这会告诉你它是否能解决问题。如果是这样,在我链接到的那个答案中,有一些关于如何做的建议。如果它是一个 bash 脚本会更容易,你必须找出最好的方法,无论是从 Python 还是通过将环境变量转储到某个地方并从 crontab 中使用它。
标签: python ubuntu cron crontab