我希望我的脚本 checkbat.sh 在电池状态过低时显示一条 xmessage。通过以下方式在终端中执行脚本
bash /usr/local/bin/checkbat.sh
运行良好。为了将它添加到 cronjobs 中,我首先
sudo crontab -e
然后添加以下行:
*/5 * * * * bash /usr/local/bin/checkbat.sh
脚本应该每五分钟执行一次。然而,什么都没发生。有什么想法吗?
答案1
从脚本启动 X 程序的问题在于它们缺少重要的环境变量,例如使用哪个显示器。
确保在 crontab 中调用的脚本顶部已设置 X 显示变量:
export DISPLAY=':0'
export XAUTHORITY='/home/your-user-here/.Xauthority'
您的 X 显示可能会有所不同;您可以通过echo $DISPLAY
在 X 会话中的终端中运行来检查。
答案2
你怎么知道它没有执行?你能给我们看一下脚本吗?
最常见的问题是您的脚本输出到控制台。在 cron 中,控制台不存在。确保您的脚本写入文件或直接写入控制台设备。
在您想要查看消息的控制台上 - 运行:tty 这将显示您在该终端会话中使用的设备。然后使用该设备名称,如下所示:/usr/bin/myscript.sh > /dev/tty 2>&1 这会将所有 tty 输出推送到该设备,并将所有错误输出推送到同一设备。警告:如果您正在打开和关闭 tty 会话,则不能依赖此方法。大多数 cron 作业旨在直接写入文本文件,并且这些文本文件以某种方式受到监控
答案3
crontab 作业没有像交互式作业那样设置环境。您必须确保在脚本中不依赖未定义的环境变量。