我刚开始使用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运行的脚本不起作用。谁能告诉我我做错了什么?
7条答案
按热度按时间snz8szmq1#
xdotool
命令是X11的自动化工具,允许您模拟键盘/鼠标输入,但由于crontab是独立运行的,因此需要定义DISPLAY
变量来指定要使用的X Window System显示服务器。通常,当你登录到桌面时,这个变量会自动分配,但是crontab在隔离的环境中运行作业(甚至没有关联的tty),特别是当你通过root
帐户运行命令时。因此,简单地说,你应该这样定义你的工作:
或者你可以在文件的开头定义变量(在Vixie cron的情况下)。参见:Variables in crontab?
还要确保运行作业的用户已被授予对所选X显示的访问权限。如果您需要授予访问权限,则需要通过
xhost
和setfacl
命令分配权限,并指定额外的XAUTHORITY
变量,请参见:Xdotool using “DISPLAY=:0”了解更多详情。k0pti3hp2#
所以我尝试了很多东西,但由于某种原因,在Ubuntu 18.04
echo $display
上返回:1
而不是:0
。另外,唯一一个似乎可以工作的环境变量设置器是添加:cron正在运行的脚本。
yvt65v4c3#
首先,正如Parth所说,确保在终端上输入echo $DISPLAY并获得输出(对我来说,出于某种原因,它是:10.0)。然后,在从cron调用的脚本中,在调用xdotool之前,写以下内容:
v440hwme4#
为什么不呢
这里不需要
cd /usr/local/bin
,因为您没有在/usr/local/bin
中运行cron作业在下面的场景中需要
cd
i7uq4tfw5#
Ubuntu 23.04
我想运行
xdotool get_desktop
,但出现错误:Authorization required, but no authorization protocol specified, Can't open display: (null)
我不仅需要获取
DISPLAY
,还需要获取XAUTHORITY
(它不是/root/.Xauthority
)解决办法是
示例:
p4rjhz4m6#
如果有人想用不同的工具调度xdotool命令,可以使用At命令(参见the tutorial)。因此,为了工作,您必须定义环境变量DISPLAY(如Kenorb所述)。我首先从该变量(echo $DISPLAY)中获取当前值,以便在脚本文件中设置(export DISPLAY=:0)。然后,它可以像这样运行:
mfuanj7w7#
你能试试这个吗