我正在尝试使用 cron 作业来查看电池何时低于给定阈值,然后发送电池严重通知。但是,当我让 cron 作业每分钟执行一个脚本,并让该脚本向我发送通知时,它不起作用。
为了确保这不是脚本的权限问题或导致 cron 作业无法运行的原因,我让脚本创建了一个文件,并且它起作用了。这是 crontab 条目:
* * * * * /home/aravk/test.sh
并且,为了简化问题,这些是以下内容test.sh
:
#!/bin/sh
/usr/bin/dunstify hi
但是,没有显示任何通知。当我手动执行该脚本时,该脚本确实有效。我还尝试通过将 crontab 条目更改DISPLAY
为 来设置环境变量,但它仍然不起作用。如何从 cron 作业执行的脚本发送通知?如果相关的话,我正在使用 Arch Linux。:0
* * * * * export DISPLAY=:0 && /home/aravk/test.sh
答案1
我将其添加到我的 crontab 中,并且我的所有通知都有效(目前已使用禅宗和通知发送):
DISPLAY=":0.0"
XAUTHORITY="/home/me/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
答案2
你必须让 crontab 作业访问一些环境变量。我刚刚在 Kali Linux 中解决了这个问题,所以打开终端并输入回车键export
,将会显示一条包含变量信息的消息。
到达declare -x DISPLAY=":1"
存在的行(值可能是0而不是1)只需将其复制DISPLAY=":1"
并粘贴到您的crontab行中,然后转到declare -x XAUTHORITY="/run/user/1000/gdm/Xauthority"
存在的行并复制此部分XAUTHORITY="/run/user/1000/gdm/Xauthority"
,然后也将其粘贴到您的crontab行中。
你的 crontab 会是这样的:
* * * * * DISPLAY=':1' XAUTHORITY='/run/user/1000/gdm/Xauthority' your_command
答案3
就我而言,问题在于将root
user 与 一起使用notify-send
。当我看到这sudo notify-send
在终端上不起作用但只是notify-send
(即当前用户)起作用时,我意识到了这一点。因此,我没有编辑通常/etc/crontab
使用的root
cron 脚本, 而是为myusername
.请检查我的整个答案这里。