运行 bash 来自 crontab 的脚本
Running bash script from crontab
我遇到困难 运行 以下来自 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
需要 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,并从当时的 gnome-sessions
环境中提取 DBUS_SESSION_BUS_ADDRESS
(及其值)。
现在 notify-send
可以在您的桌面会话中显示通知。
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 中对我有用。
我遇到困难 运行 以下来自 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
需要 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,并从当时的 gnome-sessions
环境中提取 DBUS_SESSION_BUS_ADDRESS
(及其值)。
现在 notify-send
可以在您的桌面会话中显示通知。
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 中对我有用。