test.sh: / usr / bin / notify-send "test"
Следующие действия работают: bash ~ / Documents / test.sh
НО crontab никогда не показывает уведомление. Почему?
* / 1 * * * * bash ~ / Documents / test.sh
Чтобы запустить любое приложение, связанное с графическим интерфейсом пользователя, из Cron, вы должны экспортировать несколько переменных среды рабочего стола. Нижеприведенное решение основано на этом ответе , где представлены более подробные сведения.
crontab
в Ubuntu 16.04, 17.10, 18.04 и других дистрибутивах Ubuntu с помощью Gnome Создайте сценарий запуска, который экспортирует переменные среды рабочего стола и запустит ваше приложение. Назовем его gui-launcher
. Его содержимое должно быть ( referencs: [1], [2] and [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 представлен здесь . Реализация того же сценария в Lubuntu - здесь . Сценарий можно использовать для запуска приложения с графическим интерфейсом пользователя из сеанса TTY или SSH в сеансе рабочего стола текущего пользователя. chmod + x gui-launcher
. Затем используйте его в 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 job
Среда для cron и вашего обычного пользователя может отличаться.
Когда вы используете какие-либо скрипты в cron, лучше указать полный путь к ним.