Мне нужно запустить на Ubuntu 18.04 через cron скрипт, myscript.sh
что я хочу, среди прочего, отображать пользователю сообщение во время его запуска, чтобы он знал, что cron запущен (возможно, есть также способы сделать это, которые каким-то образом не связаны с какими-либо вещами, связанными с графическим интерфейсом ; если да, дайте мне знать).
Но поскольку 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
Как я могу отобразить эту команду или любое другое сообщение графического интерфейса пользователя? Мне все равно, в какой системе отображается сообщение, пока пользователь предупрежден каким-то образом что прямо сейчас cron выполняется.
редактировать В конце концов я нашел подходящее для своих целей программное обеспечение под названием Zenity, которое может отображать текст с zenity --info --text="test"
.
Вы можете использовать notify-send
приложение для отправки уведомления на рабочий стол вошедшего в систему пользователя. Эта программа находится в libnotify-bin
пакет.
Например:
notify-send --icon install "Cron job" "It's done, boss"
Возможно, вы захотите это сделать. В своем тестировании я обнаружил, что он зависнет, если в это время ни один пользователь не вошел в систему. Это может быть просто ошибка в моей версии, но вы должны быть готовы к тому, что что-то пойдет не так.
если вы хотите запустить любую программу с пользовательским XDISPLAY:
DISPLAY=:0.0 mycomand
или DISPLAY=127.0.0.1:0.0 mycomand
xhost +127.0.0.1
)