Cron xdotool 没有 运行

Cron xdotool doesn't run

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

为什么不

*/1 * * * * /usr/local/bin/refresh.sh

cd /usr/local/bin 在这里不是必需的,因为您不是 运行 /usr/local/bin

中的 cron 作业

在以下情况下您需要 cd

*/1 * * * * cd /usr/local/bin && ls >/var/somelog # wish to execute ls in a particular directory

xdotool命令是X11的自动化工具,可以模拟keyboard/mouse输入,但是由于crontab是运行独立的,所以需要定义DISPLAY变量来指定要使用的 X Window 系统显示服务器。通常当你登录到桌面时,这个变量会自动分配,但 crontab 在隔离环境中 运行ning 作业(甚至没有关联的 tty),尤其是当你 运行 命令通过 root帐号。

简而言之,您应该像这样定义您的工作:

*/1 * * * * DISPLAY=:0 /usr/local/bin/refresh.sh

或者您可以在文件的开头定义变量(在 Vixie cron 的情况下)。参见:Variables in crontab?

还要确保正在执行作业的 运行 用户已授予对所选 X 显示器的访问权限。如果您需要授予访问权限,则需要通过 xhostsetfacl 命令分配权限并指定额外的 XAUTHORITY 变量,请参阅:Xdotool using “DISPLAY=:0” 了解更多详细信息。

所以我尝试了很多东西,但出于某种原因 Ubuntu 18.04 echo $display 返回了 :1 而不是 :0。此外,唯一似乎有效的环境变量 setter 正在添加:

export DISPLAY=":1"

直接到cron是运行的脚本。

首先,正如 Parth 所说,确保在终端上输入 echo $DISPLAY 并获得输出(出于某种原因,对我来说是 :10.0)。然后在您从 cron 调用的脚本中,在调用 xdotool 之前,写入以下内容:

export DISPLAY=:10.0 

#instead of :10.0 write your own output from before

export XAUTHORITY=/root/.Xauthority  

#if you are not a root user, instead of /root/.Xauthority write ~/.Xauthority

如果有人想用不同的工具调度 xdotool 命令,可以使用 At 命令(参见 the tutorial)。因此,为了工作,您必须定义环境变量 DISPLAY(如 Kenorb 所解释的)。我首先从该变量 (echo $DISPLAY) 获取当前值,以便在我的脚本文件中设置 (export DISPLAY=:0)。然后,它可以是 运行 比如:

at xx:xx -f your_shell_script_file

你能试试这个吗

*/1 * * * * 显示=:0 /usr/local/bin/refresh.sh