无法让 cron 输出 GUI 消息/如何让用户知道 cron 正在执行

无法让 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.shcron 会抱怨

No protocol specified
Error: Can't open display: :0

我如何才能显示此命令或任何其他 GUI 消息?我并不关心通过哪个系统显示消息,只要提醒用户即可某种程度上来说现在 cron 正在被执行。

编辑最后我找到了适合我目的的软件,叫做 Zenity,它可以显示带有 的文本zenity --info --text="test"

答案1

您可以使用该notify-send应用程序向已登录用户的桌面发送通知。此程序包含在软件包中libnotify-bin

例如:

notify-send --icon install "Cron job" "It's done, boss"

您可能希望将其置于后台。在我的测试中,我发现如果当时没有用户登录,它会挂起。这可能只是我的版本中的一个错误,但您应该为出错做好准备。

答案2

如果您想使用自定义 XDISPLAY 运行任何程序:

相关内容