我是使用crontab的新手,我一直在尝试获得一个简单的cron工作。 我希望每隔1分钟按F5刷新Mozzila Firefox。我正在使用xdotool按F5。 我有脚本 /usr/local/bin/refresh.sh:
#!/bin/bash
xdotool search --name "Mozilla Firefox" key F5
如果我在命令行中运行它可以正常工作。许可:
-rwxr-xr-x. 1 root root 89 15. čec 10.32 refresh.sh
在 crontab 中我有:
*/1 * * * * cd /usr/local/bin && sh refresh.sh
但是cron运行的脚本不起作用。 谁能告诉我我做错了什么?
答案 0 :(得分:4)
xdotool
命令是X11的自动化工具,它允许您模拟键盘/鼠标输入,但由于crontab是独立运行的,因此需要定义DISPLAY
变量来指定哪个X Window System显示服务器使用。通常,当您登录桌面时,会自动分配此变量,但crontab在隔离环境中运行作业(甚至没有关联的tty),尤其是当您通过root
帐户运行命令时。
简而言之,你应该像以下一样定义你的工作:
*/1 * * * * DISPLAY=:0 /usr/local/bin/refresh.sh
或者您可以在文件的开头定义变量(如果是Vixie cron)。请参阅:Variables in crontab?
还要确保正在运行作业的用户已授予对所选X显示的访问权限。如果您需要授予访问权限,则需要通过xhost
和setfacl
命令分配权限并指定额外的XAUTHORITY
变量,有关详细信息,请参阅:Xdotool using “DISPLAY=:0”。
答案 1 :(得分:0)
为什么不
*/1 * * * * /usr/local/bin/refresh.sh
由于您未在cd /usr/local/bin
中运行cron作业,因此此处不需要{p> /usr/local/bin
您需要cd
以下方案
*/1 * * * * cd /usr/local/bin && ls >/var/somelog # wish to execute ls in a particular directory
答案 2 :(得分:0)
所以我尝试了很多事情,但是由于某种原因,在Ubuntu 18.04上echo $display
返回了:1
而不是:0
。似乎唯一起作用的环境变量设置器也添加了:
export DISPLAY=":1"
直接访问cron正在运行的脚本。
答案 3 :(得分:0)
首先,如Parth所说,确保在终端上键入echo $ DISPLAY并获取输出(对我而言,出于某种原因,它是:10.0)。然后,在您从cron调用的脚本中,在调用xdotool之前,编写以下代码:
sibling2Schema's
答案 4 :(得分:-1)
如果有人想用不同的工具调度 xdotool 命令,可以使用 At 命令(见 the tutorial)。因此,为了工作,您必须定义环境变量 DISPLAY(如 Kenorb 所述)。我首先从该变量 (echo $DISPLAY) 中获取当前值,以便在我的脚本文件中进行设置(导出 DISPLAY=:0)。然后,它可以像这样运行:
at xx:xx -f your_shell_script_file
答案 5 :(得分:-1)
你可以试试这个吗
*/1 * * * * DISPLAY=:0 /usr/local/bin/refresh.sh