Shell

將通知發送與 cron 一起使用

  • July 29, 2021

我正在使用帶有 KDE/Awesome WM 的 Arch Linux。我正在努力 notify-sendcron.

我試過設置DISPLAY/XAUTHORITY變數,並notify-send用“sudo -u”執行,都沒有結果。

我可以從會話中以互動方式呼叫 notify-send 並獲取通知。

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。在使用我從互動式會話中獲得的值對其進行硬編碼後,每分鐘都會在螢幕上彈出一條小小的“你好”消息!

但是要注意的是,該變數不是該文章的永久變數,因此我將嘗試那裡建議的命名管道解決方案。

[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我可以使用的更友好的通知系統嗎?

您需要設置DBUS_SESSION_BUS_ADDRESS變數。預設情況下,cron 無權訪問該變數。為了解決這個問題,將以下腳本放在某個地方並在使用者登錄時呼叫它,例如使用awesomerun_oncewiki 上提到的函式。任何方法都可以,因為如果函式被呼叫的頻率超過了要求,它不會造成傷害。

#!/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

這是使用相同機制的答案。

引用自:https://unix.stackexchange.com/questions/111188