centos Cron xdotool不运行

wecizke3  于 11个月前  发布在  其他
关注(0)|答案(7)|浏览(157)

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

snz8szmq

snz8szmq1#

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”了解更多详情。

k0pti3hp

k0pti3hp2#

所以我尝试了很多东西,但由于某种原因,在Ubuntu 18.04 echo $display上返回:1而不是:0。另外,唯一一个似乎可以工作的环境变量设置器是添加:

export DISPLAY=":1"

cron正在运行的脚本。

yvt65v4c

yvt65v4c3#

首先,正如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
v440hwme

v440hwme4#

为什么不呢

*/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
i7uq4tfw

i7uq4tfw5#

Ubuntu 23.04
我想运行xdotool get_desktop,但出现错误:Authorization required, but no authorization protocol specified, Can't open display: (null)
我不仅需要获取DISPLAY,还需要获取XAUTHORITY(它不是/root/.Xauthority

echo $DISPLAY
echo $XAUTHORITY

解决办法是

export DISPLAY=<what you got from the $DISPLAY> && export XAUTHORITY=<what you got from @XAUTHORITY> && xdotool get_desktop

示例:

export DISPLAY=:0 && export XAUTHORITY=/run/user/1000/.mutter-Xwaylandauth.LYZR61 && xdotool get_desktop
p4rjhz4m

p4rjhz4m6#

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

at xx:xx -f your_shell_script_file
mfuanj7w

mfuanj7w7#

你能试试这个吗

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

相关问题