来自 crontab 的脚本 运行 无法使用 xvkbd 或 xdotool

Script run from crontab can't use xvkbd or xdotool

我想使用简单的 bash 脚本在 2 小时后自动刷新 firefox。 我有:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
xvkbd -window Firefox -text "\Cr";
exit 0

我想 运行 使用 crontab -e。我添加了任务,但没有任何反应。 当我使用终端 运行 这个脚本时,一切都没有问题。 我还在我的简单脚本中尝试了 xdotool。 我对 "reload every" 或 "Tab auto reload" 这样的 firefox 附加组件不感兴趣,因为每次重新启动 firefox 都会丢失附加组件的设置。 任何答案或想法将不胜感激。 谢谢。

crontab 不是 shell 脚本。您应该通过 运行ning man 5 crontab 阅读有关 crontab 格式的更多信息。如果这对您来说太难了,您应该在 Google 上搜索无数 cron 教程。例如,当您搜索 "Vixie cron tutorial" 时,第一个结果是 Newbie: Intro to cron,经过简短的检查,这对您入门非常有帮助。

对于您的特定用例,请将以下内容放入 crontab。 (要么粘贴到crontab -e打开的文本编辑器中,要么保存到文件中,然后crontab FILENAME。我更喜欢后一种方法。你可以查看你当前[=13]的内容=] 通过执行 crontab -l。通过 运行ning man 1 crontab 阅读更多关于 crontab 命令的信息。)

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

00 */2 * * * xvkbd -window Firefox -text "\Cr"

这样 crond 守护程序应该 运行 命令 xvkbd -window Firefox -text "\Cr" 每两个小时,在 0:00 am,2:00 am,4:00 上午等。如果您希望在 1:00 上午、3:00 上午等时间进行,请将最后一行替换为

00 1-23/2 * * * xvkbd -window Firefox -text "\Cr"

第一个 00 是分钟,因此您也可以将其替换为 30:

30 */2 * * * xvkbd -window Firefox -text "\Cr"

然后命令是 运行 0:30 am,2:30 am,等等

与往常一样,阅读手册页 (man 5 crontab) 或 tutorial 以获取更多信息。 SO 不适用于完整的教程。

xvkbd 包有些奇怪。最后我找到了另一个解决方案。 我为 Firefox 安装了 MozRepl 附加组件。 它在 .mozilla 目录中创建文件 mozrepl@hyperstruct.net.xpi。我查看了 defaults/preferences/mozrepl.js 并找到了 pref("extensions.mozrepl.autoStart", false); "false"我改成"true"。这是 Firefox 自动运行加载项的方式,即使我关闭了浏览器。 我还写了简单的期望脚本:

#!/usr/bin/expect -f
set timeout 10
spawn nc localhost 4040
expect {
"repl>"                {send "BrowserReload(), repl.quit()\r"; exp_continue}
"lost connection"      {puts "ERROR: lost connection"}
"No route to host"     {puts "ERROR: no route to host"}
timeout                {puts "ERROR: timeout"}
}

我还创建了一个 cron 任务:

00 */2 * * * /root/script.exp