Crontab 无法正确执行

Crontab 无法正确执行

我希望我的脚本 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 作业没有像交互式作业那样设置环境。您必须确保在脚本中不依赖未定义的环境变量。

相关内容