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 显示器的访问权限。如果您需要授予访问权限,则需要通过 xhost
和 setfacl
命令分配权限并指定额外的 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
我是 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
在以下情况下您需要 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 显示器的访问权限。如果您需要授予访问权限,则需要通过 xhost
和 setfacl
命令分配权限并指定额外的 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