無法讓 cron 輸出 GUI 消息/如何讓使用者知道 cron 正在執行
我需要在 Ubuntu 18.04 上通過 cron 執行一個腳本,
myscript.sh
我希望在執行時向使用者顯示一條消息,以便他知道 cron 正在執行(也許還有其他方法這樣做不涉及任何與 GUI 相關的事情;如果是,請告訴我)。但由於 cron 在其自己的最小環境中執行,我無法弄清楚如何做到這一點。
我嘗試了各種方法,最有希望的似乎是顯式分配 DISPLAY 並啟動一個分配了此顯示器的終端,並在該終端內執行一個顯示消息的命令,這意味著
myscript.sH
我有兩行export DISPLAY=:0 XAUTHORITY=~/.Xauthority gnome-terminal --display=:0.0 -- bash -c "xmessage -center -timeout 10 'ATTENTION. CRON IS RUN';exec bash"
當我在自己的終端中執行時,不涉及 cron,
gnome-terminal --display=:0.0 -- bash -c "xmessage -center -timeout 10 'ATTENTION. CRON IS RUN';exec bash"
這是可行的(當然,在我的終端中,我不需要啟動另一個終端並且可以簡單地執行xmessage -center -timeout 10 'ATTENTION. CRON IS RUN'
…)。但是 cron 抱怨以下消息(我正在將 cron 執行的輸出重定向到一個文件,以便我可以看到出了什麼問題):
No protocol specified Unable to init server: Could not connect: Connection refused
如果我改為放入
xmessage -center -timeout 10 'ATTENTION. CRON IS RUN'
,myscript.sh
cron 會抱怨No protocol specified Error: Can't open display: :0
如何獲取此命令或要顯示的任何其他 GUI 消息?我真的不在乎通過什麼系統顯示消息,只要以某種方式提醒使用者現在正在執行 cron。
編輯最後我找到了適合我的目的的軟體,稱為 Zenity,它可以顯示帶有
zenity --info --text="test"
.
您可以使用該
notify-send
應用程序向已登錄使用者的桌面發送通知。這個程序在libnotify-bin
包裡。例如:
notify-send --icon install "Cron job" "It's done, boss"
您可能希望對此進行背景說明。在我的測試中,我發現如果當時沒有使用者登錄它會掛起。這可能只是我的版本中的一個錯誤,但你應該為出現問題做好準備。
如果您想使用自定義 XDISPLAY 執行任何程序:
- 執行例如
DISPLAY=:0.0 mycomand
或DISPLAY=127.0.0.1:0.0 mycomand
- 在 cron 中:*/20 * * * * /bin/bash -c ‘DISPLAY=:0:0 mycomand’
- 訪問顯示,設置xhost(例如
xhost +127.0.0.1
)- XAuthority cookie 可能必須被複製/修復(https://stackoverflow.com/questions/37157097/how-does-x11-authorization-works-mit-magic-cookie)