Bash脚本本身可以很好地执行,但不能使用cron

Bash脚本本身可以很好地执行,但不能使用cron,bash,cron,ubuntu-14.04,crontab,cron-task,Bash,Cron,Ubuntu 14.04,Crontab,Cron Task,我打字 crontab-e 我的crontab看起来像 */1 * * * * /home/sara/Desktop/kioskscripts/reloadpage.sh >> /home/sara/Desktop/kioskscripts/logfile.log 日志文件在/kioskscript中创建,但仍为空 reloadpage.sh看起来像这样 #!/bin/bash sleep 5 /usr/bin/xdotool key F5 sh reloadpage.sh 按预

我打字

crontab-e

我的crontab看起来像

*/1 * * * * /home/sara/Desktop/kioskscripts/reloadpage.sh >> /home/sara/Desktop/kioskscripts/logfile.log
日志文件在/kioskscript中创建,但仍为空

reloadpage.sh看起来像这样

#!/bin/bash
sleep 5
/usr/bin/xdotool key F5
sh reloadpage.sh


按预期工作,模拟f5在执行5秒后被按下。

cron
执行的程序没有活动窗口,因此您需要使用
--window
选项明确指定要将击键发送到哪个窗口

您可以使用
xdool getactivewindow
获取当前活动窗口的窗口id,然后在
xdool
命令中使用该编号。或者,您可以使用带有各种选项的
xdool search
来查找要将按键指向的窗口。阅读
man xdool
,了解各种搜索选项。(您可以在单个命令中执行此操作:
xdooolsearch--name Foo key F5
将F5发送到名称中带有
Foo
的窗口。)


但这仅在指定的窗口接受事件时有效,而许多窗口不接受事件。

cron
执行的程序没有活动窗口,因此您需要使用
--window
选项明确指定要将击键发送到哪个窗口

您可以使用
xdool getactivewindow
获取当前活动窗口的窗口id,然后在
xdool
命令中使用该编号。或者,您可以使用带有各种选项的
xdool search
来查找要将按键指向的窗口。阅读
man xdool
,了解各种搜索选项。(您可以在单个命令中执行此操作:
xdooolsearch--name Foo key F5
将F5发送到名称中带有
Foo
的窗口。)


但是,只有当指定的窗口接受事件时,这才有效,而许多窗口不接受事件。

为什么希望
xdool
将任何内容写入标准输出?或者,更好的说法是,您希望它写什么?我希望如果执行reloadpage.sh时抛出错误,该错误将被写入日志文件。不过,这一部分与让脚本每分钟正确执行一次没有多大关系。如果执行reloadpage.sh抛出错误,错误将写入stderr,而不是stdout。所以您需要使用
2>
来捕获它。(但是,如果目标窗口未处理击键事件,我认为
xdool
不会给您错误。)为什么希望
xdool
将任何内容写入标准输出?或者,更好的说法是,您希望它写什么?我希望如果执行reloadpage.sh时抛出错误,该错误将被写入日志文件。不过,这一部分与让脚本每分钟正确执行一次没有多大关系。如果执行reloadpage.sh抛出错误,错误将写入stderr,而不是stdout。所以您需要使用
2>
来捕获它。(但是,我不认为如果击键事件不是由目标窗口处理的,
xdool
会给你一个错误。)Chrome只在焦点时接受击键,这对我来说是好的。ty,没有你就不会发现这个。@Brianhotp:你也可以将
windowraise
添加到xdool命令中。但我认为这会对用户体验造成相当大的破坏:)Chrome只接受按键,但只有在聚焦时才接受,这对我来说是很好的。ty,没有你就不会发现这个。@Brianhotp:你也可以将
windowraise
添加到xdool命令中。但我认为这会对用户体验造成相当大的破坏:)