Cron xdotool没有运行

时间:2016-07-15 08:56:01

标签: shell cron centos crontab xdotool

我是使用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运行的脚本不起作用。 谁能告诉我我做错了什么?

6 个答案:

答案 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显示的访问权限。如果您需要授予访问权限,则需要通过xhostsetfacl命令分配权限并指定额外的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