루트 크론 알림에서 보내기

루트 크론 알림에서 보내기

내 시스템에서는 notify-send3개의 환경 변수를 실행해야 하며 로그인 시 자동으로 생성되는 파일에 저장됩니다.

/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-sendsudo cron()이 아닌 곳에서는 실행할 수 있지만 crontab -esudo cron()에서는 실행할 수 없습니다 sudo crontab -e.

또한 오류가 생성되었는지 확인해 보았습니다.

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

그러나 로그 파일은 비어 있습니다.

sudo cron을 통해 어떻게 작동하게 합니까?

우분투 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

관련 정보