Как я могу показать сообщения уведомления-отправки, инициированные 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:
Здесь представлена реализация того же скрипта через SSH: Как запустить файлы скрипта (.sh) в новом терминале после подключения к серверу Ubuntu 16.04 через ssh?
Здесь представлены дополнительные объяснения: задание Cron для запуска сценария Python при перезагрузке не работает.
И еще один пример: отрегулируйте яркость с помощью xrandr и cron.
Среда для cron и вашего обычного пользователя может быть разной.
Когда вы используете какие-либо скрипты в cron, лучше указывать полный путь к ним.