1

我很难从 crontab 运行以下简单脚本:

#!/bin/bash
notify-send "battery.sh working"

该文件的权限是rwxr-xr-x并且可以使用任何命令bash battery.shsh battery.sh.

在我的 crontab 中,我尝试使用bashand运行它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 的消息。

4

2 回答 2

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"

这会查找您的进程 ID,并从 then ' 环境中gnome-session提取DBUS_SESSION_BUS_ADDRESS(及其值) 。gnome-sessions

现在notify-send能够在您的桌面会话中显示通知。

于 2018-03-02T12:01:45.413 回答
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 中对我有用。

于 2018-09-05T12:15:19.640 回答