Как я могу показать сообщения уведомления-отправки, инициированные crontab?

test.sh: /usr/bin/notify-send "test"

Следующие работы: bash ~/Documents/test.sh

НО crontab никогда не показывает уведомление. Зачем?

*/1 * * * * bash ~/Documents/test.sh

2 ответа

Решение

Для запуска любого приложения с графическим интерфейсом из Cron вам нужно экспортировать несколько переменных окружения рабочего стола. Приведенное ниже решение основано на этом ответе, где предоставлено больше деталей.

Как запустить любое приложение с графическим интерфейсом из crontab в Ubuntu 16.04, 17.10, 18.04 и других дистрибутивах Ubuntu с Gnome

Создайте сценарий запуска, который будет экспортировать переменные среды рабочего стола и запустит ваше приложение. Давайте назовем это gui-launcher, Его содержание должно быть (ссылки: [1], [2] и [3]):

#!/bin/bash -e

# NAME: gui-launcher

# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done

# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")

# Execute the input command
nohup "$@" >/dev/null 2>&1 &

exit 0
  • Для других настольных сред изменить gnome-session в этой части $(pgrep gnome-session -n -U $UID) с именем процесса DE, например, в использовании mate-session, Список самого Ubuntu DE представлен здесь. Реализация того же скрипта в Lubuntu - здесь. Сценарий можно использовать для запуска приложения с графическим интерфейсом из сеанса TTY или SSH в сеансе рабочего стола текущего пользователя.
  • Сделайте файл исполняемым: chmod +x gui-launcher,
  • Сценарий будет работать до тех пор, пока пользователь не войдет в систему, включая заблокированный экран.
  • Пожалуйста, не изменяйте и не запускайте скрипт как root. Это может быть вредно для системы!

Затем используйте его в течение crontab в этом случае:

*/1 * * * * /full/path/to/gui-launcher "/full/path/to/the-targer-application"

Вот как это работает на Ubuntu 17.10 на Wayland:


Среда для cron и вашего обычного пользователя может быть разной.

Когда вы используете какие-либо скрипты в cron, лучше указывать полный путь к ним.

Другие вопросы по тегам