Cron

無法讓 cron 輸出 GUI 消息/如何讓使用者知道 cron 正在執行

  • August 30, 2020

我需要在 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.shcron 會抱怨

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 執行任何程序:

引用自:https://serverfault.com/questions/1019454