I need to run, on Ubuntu 18.04, via cron a script, myscript.sh
that I want, among other things, to display to the user a message when it is being run so that he is aware that cron is being run (perhaps there are also ways to do this that somehow don't involve any GUI-related things; if yes, do let me know).
But since cron runs in its own, minimal environment, I wasn't able to figure out how to do that.
I tried various approaches and the most promising seemed to explicitly assign DISPLAY and start a terminal with this display assigned to it and inside that terminal to run a command that displayes a message, meaning in myscript.sH
I have two lines
export DISPLAY=:0 XAUTHORITY=~/.Xauthority
gnome-terminal --display=:0.0 -- bash -c "xmessage -center -timeout 10 'ATTENTION. CRON IS RUN';exec bash"
When I run in my own terminal, without cron being involved, gnome-terminal --display=:0.0 -- bash -c "xmessage -center -timeout 10 'ATTENTION. CRON IS RUN';exec bash"
this works (of course, in my terminal I wouldn't need to start another terminal and could simpy run xmessage -center -timeout 10 'ATTENTION. CRON IS RUN'
...).
But cron complains with the following message (I'm redirecting the outputs of what cron execute to a file, so that I can see what went wrong):
No protocol specified
Unable to init server: Could not connect: Connection refused
If I instead place xmessage -center -timeout 10 'ATTENTION. CRON IS RUN'
in myscript.sh
, cron complains
No protocol specified
Error: Can't open display: :0
How can I get either this command, or any other GUI message to be displayed? I don't really care through what system the message is displayed, as long as the user is alerted in some way that right now cron is being executed.
Edit In the end I found the right software for my purpose, called Zenity, that can display text with zenity --info --text="test"
.