我使用此脚本过夜重新启动 Firefox(以应用包管理器和插件更新):
#!/bin/bash
killall -s SIGTERM firefox; sleep 15
firefox -P "user" &
firefox -P "default settings" &
crontab(凌晨 3 点运行):
0 3 * * * /usr/local/bin/firefox.sh
手动执行时,脚本按预期工作:关闭 Firefox 进程并在各自的窗口中启动两个配置文件。
当 cron 运行该脚本时,Firefox 始终只是关闭。
答案1
cron
作业在完全独立的环境中运行,与常用的 GUI 桌面或终端环境隔离。
firefox
期望作为桌面环境的子进程运行,或者至少有一个有效的DISPLAY
变量集。
有时可以让 cron 作业启动或与 GUI 程序交互。尝试添加export DISPLAY=:0.0
为脚本的第二行。如果:0.0
不起作用,请在桌面上运行终端并运行echo $DISPLAY
以获取正确的值。
如果这仍然不起作用,您可能还需要设置XAUTHORITY=$HOME/.Xauthority
或使用xauth
来启用访问。
请注意,任何从 cron 启动的程序(包括 firefox)都将继承 cron 相当简约的环境。诸如 PATH、LOGNAME 和/或 USER 之类的变量可能与您期望的不同,并且许多变量根本不会被设置。例如,LC_* 语言环境变量可能未设置(取决于发行版 - 例如 Debian 中的 cron 读取/etc/environment
和/etc/default/locale
。我不知道 Fedora 上是否也是这种情况)。如果该程序需要将特定环境变量设置为特定值,则需要在 crontab 文件中设置它们,或者export
也需要在脚本中设置它们。或者只是source
脚本中常用的 shell 启动文件。
Firefox、Chromium 和其他网络浏览器可能需要http_proxy
、https_proxy
和其他与代理相关的变量设置。
仅供参考,这大致就是运行 GUI 程序的ssh -X
工作原理。该-X
选项启用 X11 转发。它通过 ssh 连接建立一条到代理 X 协议的隧道,并将 DISPLAY 变量设置为指向该隧道。
例如,我使用它xsane
在我的服务器(主机名“ganesh”,连接了 HP3030 打印机/扫描仪)上运行,但在我的工作站显示器上显示窗口 - 即ssh -X ganesh xsane
.
如果我要运行ssh -X ganesh 'echo $DISPLAY'
(需要单引号或转义,以便我的本地 shell 不会插入变量),我会看到类似以下内容:
$ ssh -X ganesh 'echo $DISPLAY'
ganesh:11.0