我使用的是 kubuntu 14.04。我已经使用 sudo apt-get install cron 安装了 cron,然后在 IDLE 中创建了这个文件,名为openurl.py
.
#!/usr/bin/env python
import webbrowser
webbrowser.open('http://eample.com')
然后我chmod +x openurl.py
在终端中输入以使 .py 文件可执行。如果我./openurl.py
在终端中输入,脚本就会起作用。
然后,使用启动应用程序启动器,我单击系统设置 > 任务计划程序 > 新任务 > 然后搜索 openurl.py 文件,并选择我希望它运行的时间。
如果我crontab -e
在终端中输入,则会显示:
#openurl
21 21 * * * /home/craig/openurl.py
# File generated by KCron the Thursday 29 Jan 2015 21:20.
然后我等待,什么也没有发生。我究竟做错了什么?
答案1
我认为你的 cron 配置是正确的。我并不完全熟悉 python webbrower.open() 函数,但我假设您希望 python 脚本在可见的浏览器窗口中打开页面。
我认为这里发生的情况是,当您从命令行调用脚本时,它会起作用,因为它在图形会话中运行。当从 cron 调用它时,它会在一个新会话中运行,而不会挂钩到当前的图形环境,因此它无法启动浏览器。您可以通过让脚本创建具有当前时间戳的文件或将当前时间戳写入某处的日志来验证脚本是否正在运行。
如果您的最终目标是每天刷新一次页面,您可以考虑使用浏览器插件来实现这一目标,否则您需要找出环境问题。
答案2
问题是 cron 不知道您的登录会话。
如果脚本无法在系统控制台 ( ctrl-alt-f1
) 上运行,那么它肯定会在 cron 中运行。
如果你想自动化 GUI 的东西,可能需要使用基于 GUI 的 dscheduler 而不是 cron。
答案3
正如安德鲁所说,你的工作可能会失败,因为它需要X 会话,因为您正在尝试打开网络浏览器。您应该将其放在export DISPLAY=:0;
cronjob 中的时间表之后,如下所示
21 21 * * * export DISPLAY=:0; /home/craig/openurl.py
如果这不起作用,您可以尝试替换为图形终端中:0
的输出。echo $DISPLAY