Как запустить скрипт командной оболочки в bash каждый час с помощью cron?

Я поместил эту строку в crontab:

1 * * * * DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

Скрипт исполняемый.

Если вставить эту команду в терминал, то есть строку без звездочек, она отлично работает:

DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

Я старался:

sudo service cron restart

Но проблема сохраняется. Как я могу получить cron запускать эту команду ежечасно?


Обновить. Получил работу с ROOT crontab:

1 * * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 XAUTHORITY=/home/user/.Xauthority /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

1 ответ

Решение

Я думаю, мое первое предположение о том, как DISPLAY переменная обрабатывается неправильно. Я думаю, что проблема как-то связана с cron используя неинтерактивную оболочку. Тестовый скрипт с использованием бесконечного read цикл не удалось запустить. Однако, когда я тестировал, открывая новую вкладку:

* * * * * DISPLAY=:0 /usr/bin/gnome-terminal --tab -e /home/murukesh/test.sh

все работало нормально


Согласно этому вопросу SU и этому посту на форумах Ubuntu, вам, возможно, придется export $DISPLAY переменная или использование env:

1 * * * * env DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

(или же)

1 * * * * export DISPLAY=:0.0 && /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

Это может быть из-за оболочки, используемой cron являющийся sh и не bash (см. в чем разница между set, export и env и когда я должен использовать каждый из них?). Также обратите внимание на то, что Script не запускается через crontab, но отлично работает автономно.

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