从根 cron 通知发送

从根 cron 通知发送

在我的系统上,notify-send需要 3 个环境变量才能运行,它们保存在登录时自动生成的文件中:

/home/anmol/.env_vars:

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-PwezoBTpF3
export DBUS_SESSION_BUS_ADDRESS
XAUTHORITY=/home/anmol/.Xauthority
export XAUTHORITY
DISPLAY=:0
export DISPLAY

并且,在 crontab 缓冲区中,我输入了以下内容:

PATH=/home/anmol/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

* * * * *  /home/anmol/display-notif.sh

在哪里display-notif.sh包含:

#!/usr/bin/env bash

. /home/anmol/.env_vars
notify-send 'hello'

虽然我可以通过此设置notify-send从非 sudo cron ( crontab -e) 运行,但我无法从 sudo cron ( ) 运行sudo crontab -e

我还尝试检查是否生成任何错误:

* * * * *  /home/anmol/display-notif.sh 2>/home/anmol/log

但该日志文件是空的。

我如何通过 sudo cron 使其工作?

我使用的是 Ubuntu 16.04。

答案1

这个函数(来自https://unix.stackexchange.com/a/344377/7286)在 Ubuntu 16.04 中对我有用:

notify_all() {
    local title=$1
    local msg=$2

    who | awk '{print $1, $NF}' | tr -d "()" |
    while read u d; do
        id=$(id -u $u)
        . /run/user/$id/dbus-session
        export DBUS_SESSION_BUS_ADDRESS
        export DISPLAY=$d
        su $u -c "/usr/bin/notify-send '$title' '$msg'"
    done 
}

答案2

更换后即可使用

* * * * *  /home/anmol/display-notif.sh

* * * * *  sudo -u anmol /home/anmol/display-notif.sh

相关内容