我无法从crontab运行以下简单脚本:
#!/bin/bash
notify-send "battery.sh working"
该文件的权限为rwxr-xr-x
,并且使用bash battery.sh
和sh battery.sh
命令正常运行。
在我的crontab中,我尝试使用bash
和sh
运行它,包括绝对路径和本地路径。我目前的crontab如下所示:
* * * * * /home/marpangal/battery.sh
* * * * * sh battery.sh
* * * * * bash battery.sh
* * * * * sh /home/marpangal/battery.sh
* * * * * bash /home/marpangal/battery.sh
然而,cron没有执行脚本,我没有收到来自notify-send的消息。
答案 0 :(得分:0)
notify-send
需要DBUS_SESSION_BUS_ADDRESS
环境变量才能与当前桌面会话进行通信。由于cron
在几乎为空的环境中运行,因此该变量不可用。
但您可以直接在battery.sh
脚本中设置它:
export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)
notify-send "Message from cron"
这会查找gnome-session
的流程ID,并从DBUS_SESSION_BUS_ADDRESS
'环境中提取gnome-sessions
(及其值)。
现在notify-send
能够在桌面会话中显示通知。
答案 1 :(得分:0)
Flopps的答案给了我-bash: warning: command substitution: ignored null byte in input
–所以我尝试了不同的方法:
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
notify-send "Message from cron"
我认为这不像原始导出那样灵活,但可以在我的用户crontab中为我工作。