我需要在 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
包里。例如:
您可能希望对此进行背景说明。在我的测试中,我发现如果当时没有用户登录它会挂起。这可能只是我的版本中的一个错误,但你应该为出现问题做好准备。
如果您想使用自定义 XDISPLAY 运行任何程序:
DISPLAY=:0.0 mycomand
或DISPLAY=127.0.0.1:0.0 mycomand
xhost +127.0.0.1
)