更新开始
- 我的一个朋友刚刚回答了这个问题。我需要等
export DISPLAY=:0 && <my GUI dependent command here>
他在这里发布答案。 - 我也尝试过
/opt/google/chrome/chrome PARTICULAR_GOOGLE_DOC_URL &
不使用这个&
。仍然失败。直接在命令行上成功。 - 我的机器上没有
/var/log/cron
文件。附加问题:我该如何获取它?
更新结束
我有一份 Google Doc,需要每天多次定期更新。无法通过编程预测或确定特定更新的内容。因此,我最好的解决方案是让特定的 Google Doc 页面以固定间隔自动打开,然后我手动将数据添加到其中。
现在,问题是直接在命令行上运行的方法在 crontab 中使用时不起作用。以下是我尝试过的方法(仅使用 2 分钟间隔进行测试)-
*/2 * * * * date >> /tmp/crontest
*/2 * * * * /opt/google/chrome/chrome PARTICULAR_GOOGLE_DOC_URL &
- 如果我
cat /tmp/crontest
,我会看到每隔 2 分钟添加一次时间戳 - 如果我只是
/opt/google/chrome/chrome PARTICULAR_GOOGLE_DOC_URL
在 shell 上尝试,它会按预期工作 - 但是它并
PARTICULAR_GOOGLE_DOC_URL
没有像应该的那样每隔 2 分钟在我的 chrome 中打开一次。(再次说明:我使用 2 分钟间隔只是为了测试)
我做错了什么?我该如何解决这个问题?还有其他方法可以实现我需要的功能吗?
提前致谢。
答案1
使用包装器编辑 crontab export DISPLAY
:
2 * * * * export DISPLAY=:0 && firefox %u
这将打开一个空的 Firefox 标签,您可以使用您最喜欢的 URL。
答案2
cron
用于命令行作业,并使用环境变量非常有限-只是HOME
,,,和。LOGNAME
PATH
SHELL
至少chrome
需要DISPLAY
设置。如果没有其他变量(例如DBUS
相关变量),它也可能会不高兴。env
在终端中运行以查看当前环境。
答案3
cronjob 所获得的环境非常有限。例如,您无法获得打开 chrome 所需的 DISPLAY 变量。
将命令包装在脚本中
#!/bin/sh
export DISPLAY=:0
/opt/google/chrome/chrome PARTICULAR_GOOGLE_DOC_URL
不确定是否需要更多变量才能使其工作。我制作了一个类似的脚本,该konsole
脚本在 cron 中启动(KDE 中的终端)。
答案4
您可以简单地像这样添加设置。
2 * * * * export DISPLAY=:0 && ,<do what ever you want.>
如果这不起作用,并且您没有找到 google-chrome 或 firefox,只需在您的 shell BASH、FISH、ZSH 等中运行以下命令即可获取 PATH。
echo $PATH
无论上述命令的结果是什么,只需将其复制并粘贴到你的 cronjob 上面,就像这样,
PATH=<result from cmd>
这样做的原因是,您可能从 snapd 等安装相应的内容,这就是为什么路径未定义的原因,因为您是从单独的资源下载的。