gpt4 book ai didi

python - crontab 在 Ubuntu 上不执行 Python 脚本

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:47 25 4
gpt4 key购买 nike

我有一个包含以下代码的 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 每分钟就像我设置的那样,但由于某种原因,这个命令虽然应该发送系统通知,但不是这样做。有什么想法吗?

编辑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])

关于python - crontab 在 Ubuntu 上不执行 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com