从crontab运行bash脚本

问题描述 投票:1回答:2

我无法从crontab运行以下简单脚本:

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

该文件的权限是rwxr-xr-x,它的运行正常,使用命令bash battery.shsh battery.sh

在我的crontab中,我尝试使用bashsh运行它,具有绝对路径和本地路径。我目前的crontab如下所示:

* * * * * /home/marpangal/battery.sh
* * * * * sh battery.sh
* * * * * bash battery.sh
* * * * * sh /home/marpangal/battery.sh
* * * * * bash /home/marpangal/battery.sh

但是,cron不执行脚本,我没有收到来自notify-send的消息。

bash ubuntu cron notify-send
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"

这会查找你的gnome-session的进程id并从当时的DBUS_SESSION_BUS_ADDRESS环境中提取gnome-sessions(及其值)。

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


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中适用于我。

© www.soinside.com 2019 - 2024. All rights reserved.