Чтобы запустить задание cron в полночь, вы должны добавить к своей команде или пути к вашему сценарию префикс:
0 0 * * *
Например, для запуска /дом/юссиф/myscript
, вы бы использовали:
0 0 * * /home/youssif/myscript
в вашем файле crontab.
Чтобы отредактировать файл crontab, использовать кронтаб -е
для запуска команды от имени вашего текущего пользователя. В качестве альтернативы, если вам абсолютно необходимо запустить команду от имени пользователя root, вы можете запустить судо кронтаб -е
для редактирования файла crontab.
Чтобы запустить команду в терминале (не очень хорошая идея, если вы запускаете команду от имени пользователя root), вам нужно будет указать дисплей для использования в вашей команде или в вашем скрипте. Для этого, предполагая, что ваш $ ДИСПЛЕЙ
является :0
(по умолчанию) вы можете добавить к своей команде следующую переменную:
ДИСПЛЕЙ=:0
Кроме того, терминал обычно закрывается после выполнения команды, но вы можете используйте опцию удержания с xterm держать терминал открытым.
Итак, для запуска эхо "привет мир"
в терминале в полночь, ваша команда будет выглядеть так:
0 0 * * DISPLAY=:0 xterm -hold -e 'эхо "привет, мир"'
или запустить ваш скрипт:
0 0 * * DISPLAY=:0 xterm -hold -e '/home/youssif/myscript'
Однако стандартный способ проверки вывода cronjob — перенаправить вывод терминала в файл, который вы сможете просмотреть позже.
Например, чтобы перенаправить вывод терминала в файл /home/юссиф/helloworld.log
вы должны использовать следующую строку в вашем файле crontab:
0 0 * * echo "привет, мир" > /home/youssif/helloworld.log
Кроме того, вы также можете использовать тройник
команда для перенаправления вывода следующим образом:
0 0 * * эхо "привет, мир" | тройник /home/youssif/helloworld.log
Наконец, вы можете использовать кот
команда для просмотра содержимого файла:
кошка /home/youssif/helloworld.log
Таким образом, команда может работать в фоновом режиме, но вы все равно можете проверять вывод.
Чтобы отключить/включить задачи на основе результата уже запущенной задачи, я думаю, что это действительно было бы более подходящим для отдельного вопроса. Я полагаю, что ваш ответ будет включать использование оператора «если, то еще» в сценарии bash.
РЕДАКТИРОВАТЬ:
Как @Tcooper указал, мы должны добавить 2>&1
перенаправить весь вывод, включая сообщения об ошибках поэтому вы можете вместо этого использовать что-то вроде этого:
0 0 * * echo "hello world" 2>&1 > /home/youssif/helloworld.log
или же
0 0 * * эхо "привет, мир" 2>&1 | тройник /home/youssif/helloworld.log