我使用此脚本在夜间重新启动 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 始终只关闭。
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 不会插入变量),我会看到如下内容: