该脚本在用户的 crontab 中运行良好,但我需要从 ROOT crontab 运行,但却不起作用:
#!/bin/sh
# cron.sh
# Notifies the user of date and time
source /home/user/.bashrc
pid=$(pgrep -u user openbox | head -n 1)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//' )
export DBUS_SESSION_BUS_ADDRESS=$dbus
export HOME=/home/user
export DISPLAY=:0
/usr/bin/notify-send 'title' "$(/bin/date)"
该脚本位于此处: crontab 脚本
该脚本位于 /home/user/cron.sh 上,具有所有权限(777)。我的根 crontab 是:
* * * * * /home/user/cron.sh
如果我在普通用户 crontab 中使用此脚本,它会工作并显示弹出文本,但不会在 root crontab 中工作。/var/log/syslog
crontab 触发时,Syslog() 不显示错误。
答案1
我非常确定notify-send
需要以应该接收通知的用户身份运行。尝试用以下内容替换最后一行:
su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'
该su user -c
命令切换用户user
并将-c
以下命令传递给 shell。
该语句应该切换到正确的用户并运行命令。
如果您想以另一个用户身份运行整个脚本,请查看Stack Overflow 上的此问答。