Scripting

無法從 cron 作業發送通知

  • February 20, 2021

我正在嘗試使用 cron 作業來查看電池何時低於給定門檻值,然後發送電池緊急通知。但是,當我讓 cron 作業每分鐘執行一次腳本並讓腳本向我發送通知時,它就不起作用了。

為了確保這不是腳本的權限問題或導致 cron 作業無法執行的原因,我讓腳本創建了一個文件,並且它可以正常工作。這是 crontab 條目:

* * * * * /home/aravk/test.sh

而且,為了簡化問題,這些是以下內容test.sh

#!/bin/sh
/usr/bin/dunstify hi

但是,沒有顯示通知。當我手動執行該腳本時,它確實有效。我還嘗試通過將 crontab 條目更改為來將DISPLAY環境變數設置為,但它仍然不起作用。如何從 cron 作業執行的腳本發送通知?如果相關,我在 Arch Linux 上。:0``* * * * * export DISPLAY=:0 && /home/aravk/test.sh

我將此添加到我的 crontab 並且我的所有通知都可以正常工作(目前使用zenitynotify-send進行了測試):

DISPLAY=":0.0"
XAUTHORITY="/home/me/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

你必須讓 crontab 作業訪問一些環境變數。我剛剛在我的 Kali Linux 中解決了這個問題,所以打開終端並export輸入輸入,將顯示一條包含變數資訊的消息。

到達declare -x DISPLAY=":1"存在的行(值可能是 0 而不是 1)只需複制DISPLAY=":1"並在您的 crontab 行中過去,然後轉到declare -x XAUTHORITY="/run/user/1000/gdm/Xauthority"存在的行並複制此部分XAUTHORITY="/run/user/1000/gdm/Xauthority",然後在您的 crontab 行中也過去。

你的 crontab 會是這樣的:

* * * * * DISPLAY=':1' XAUTHORITY='/run/user/1000/gdm/Xauthority' your_command

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