cron으로 알림 보내기 사용

cron으로 알림 보내기 사용

저는 Arch Linux와 KDE/Awesome WM을 사용하고 있습니다. 나는 notify-send와 함께 일하려고 노력하고 있습니다 cron.

나는 DISPLAY/ XAUTHORITY변수를 설정하고 notify-send"sudo -u"를 사용하여 실행해 보았지만 소용이 없었습니다.

대화형으로 알림 보내기를 호출하고 세션에서 알림을 받을 수 있습니다.

FWIW, cron 작업이 제대로 실행되고 내용을 임시 파일에 에코하여 확인했습니다. 단지 "알림 보내기"가 작동하지 않습니다.

암호:

[matrix@morpheus ~]$ crontab -l
* * * * *  /home/matrix/scripts/notify.sh

[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send

[matrix@morpheus ~]$ 

보시다시피 알림 전송은 에코 전후에 작동합니다.
저도 설정해봤는데DISPLAY=:0.0

업데이트: 좀 더 검색해봤습니다.DBUS_SESSION_BUS_ADDRESS를 찾았습니다.설정이 필요합니다. 대화형 세션에서 얻은 값으로 하드코딩한 후 매분마다 작은 "hello" 메시지가 화면에 나타납니다.

하지만 문제는 이 변수가 영구적이지 않다는 것입니다. 따라서 거기에 제안된 명명된 파이프 솔루션을 시도해 보겠습니다.

[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

알림 보내기가 지원되지 않는 것 같으니 (적어도 직접적으로는), 사용할 수 있는 cron다른 친숙한 알림 시스템이 있습니까 ?cron

답변1

이 변수를 설정해야 합니다 DBUS_SESSION_BUS_ADDRESS. 기본적으로 cron은 이 변수에 액세스할 수 없습니다. 이 문제를 해결하려면 다음 스크립트를 어딘가에 넣고 사용자가 로그인할 때 호출하세요.놀라운그리고 run_once위키에 언급된 기능들입니다. 함수가 필요한 것보다 더 많이 호출되더라도 해가 되지 않으므로 어떤 접근 방식이든 가능합니다.

#!/bin/sh

touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

그러면 필수 Dbus 환경 변수가 포함된 파일이 생성됩니다. 그런 다음 cron이 호출한 스크립트에서 스크립트를 가져와 변수를 가져옵니다.

if [ -r "$HOME/.dbus/Xdbus" ]; then
  . "$HOME/.dbus/Xdbus"
fi

이것은동일한 메커니즘을 사용하여 응답합니다.

답변2

crontab 자체에서 변수를 설정해야 합니다.

DISPLAY=:0.0
XAUTHORITY=/home/matrix/.Xauthority

# m h  dom mon dow   command 
* * * * *  /usr/bin/notify-send "hello"

아니요 sudo, 적어도 내 시스템에는 없습니다.

답변3

우분투 18.04에서 i3을 사용하고 있습니다. 제가 이 문제를 해결한 방법은 다음과 같습니다.

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"

답변4

이 농담은 Manjaro와 Cronie에서 저에게 효과적이었습니다.

# Note: "1000" would be your user id, the output of... "id -u <username>" 
10 * * * * pj DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send 'Hello world!' 'This is an example notification.'

매우 추악한 DBUS_blah_blah가 없으면 전혀 작동하지 않습니다. 나는 또한 journalctl -xb -u cronie그것이 도움이 된다는 것을 알았습니다. FWIW, Cronie는 crond를 사용하며 Vixie cron과 역호환되어야 합니다.

여기서 해결책을 찾았습니다https://wiki.archlinux.org/index.php/Desktop_notifications

업데이트: 2021년에도 여전히 유효합니다. 이 프롬프트를 /etc/crontab 파일에 추가했습니다.

# After installing cronie:
# systemctl start cronie
# systemctl enable cronie

# After editing this file:
# chmod 600 /etc/crontab    
# crontab /etc/crontab
# Check that the changes are set:
# crontab -l

관련 정보