![通过 crontab 启动 X11 应用程序 (Firefox)](https://linux22.com/image/76728/%E9%80%9A%E8%BF%87%20crontab%20%E5%90%AF%E5%8A%A8%20X11%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%20(Firefox).png)
我想写一个每分钟打开Firefox的crontab(只是为了测试它,我知道它没有任何意义)。我的问题是,即使 crontab 处于活动状态,也没有任何反应。这就是我的 crontab 的样子:
SHELL=/bin/bash
PATH=~/bin:/usr/bin:bin
* * * * * export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
知道为什么它不起作用吗?
答案1
export DISPLAY=:0.0 xhost localuser /usr/bin/firefox
只要看看上面的 cron 命令,我就明白为什么它不起作用了。该命令的用法export
是
export name[=word]...
在 POSIX shell 中,后面的其余单词export DISPLAY=:0.0
将被视为应导出到环境的其他 shell 变量,而不是要运行的命令。 POSIX(2018 年版第 7 期)还规定姓名应该
仅由可移植字符集中的下划线、数字和字母组成的单词。
这意味着 shell 变量名称不能包含诸如 之类的字符,/
因此尝试将其包含/usr/bin/firefox
在要导出的变量名称列表中将引发错误,并显示诸如not a valid identifier
或 之类的消息bad variable name
。
另外,该xhost
命令的使用不正确。自行运行xhost
以查看是否需要将您的用户帐户添加为允许的用户。这应该只需要运行一次,并且不应该由 cron 安排。
除非有其他机制阻止程序连接到 X 显示服务器,否则上面的行可以简单地替换为:
DISPLAY=:0.0
* * * * * /usr/bin/firefox
这应该每分钟启动一个新的 Firefox 窗口。也无需指定SHELL
环境变量 - 并且由于您指定了可执行文件的完整路径firefox
,因此也无需设置该PATH
变量。
也可以看看:POSIX 规范export