Назад | Перейти на главную страницу

Не удается заставить cron выводить сообщение графического интерфейса пользователя / как сообщить пользователю, что cron выполняется

Мне нужно запустить на 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
  • в cron: * / 20 * * * * / bin / bash -c 'DISPLAY =: 0: 0 mycomand'
  • чтобы настроить отображение, установив xhost (например, xhost +127.0.0.1)
  • Файл cookie XAuthority, возможно, придется скопировать / исправить ( https://stackoverflow.com/questions/37157097/how-does-x11-authorization-works-mit-magic-cookie )