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

MyC*_*Hat 0 graphical-user-interface cron shell-scripting

我需要在 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"
Run Code Online (Sandbox Code Playgroud)

当我在我自己的终端中运行时,不涉及 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
Run Code Online (Sandbox Code Playgroud)

如果我不是放置xmessage -center -timeout 10 'ATTENTION. CRON IS RUN'myscript.sh,cron的抱怨

No protocol specified
Error: Can't open display: :0
Run Code Online (Sandbox Code Playgroud)

如何获取此命令或要显示的任何其他 GUI 消息?我并不真正关心通过什么系统显示消息,只要以某种方式提醒用户现在正在执行 cron。

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

Mic*_*ton 5

您可以使用该notify-send应用程序向登录用户的桌面发送通知。这个程序在libnotify-bin包里。

例如:

notify-send --icon install "Cron job" "It's done, boss"
Run Code Online (Sandbox Code Playgroud)

您可能希望以此为背景。在我的测试中,我发现如果当时没有用户登录它会挂起。这可能只是我版本中的一个错误,但您应该为出现问题做好准备。