Как запустить скрипт командной оболочки в 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, но отлично работает автономно.