April 24, 2022

crontab на пальцах

Сегодня я расскажу о демоне crontab, который выполняет нужные нам задачи по расписанию, которое мы можем удобно настраивать.

Иногда вам требуется вызвать команду/исполнить скрипт в определенное время, или исполнять его с какой-то периодичностью, скажем, каждые пол часа или раз в день, и есть желание автоматизировать рутинные действия. Как раз для этой задачи и предназначен демон crontab, который читает таблицу задач, и исполняет задачи в нужное нам время.

На Ubuntu 20.04 он уже предустановлен, вот что может утилита

crontab path/to/file.crontab      #загрузить таблицу из файла
crontab -e                        #редактировать таблицу 
crontab -r                        #удалить таблицу
crontab -l                        #посмотреть на таблицу

Давайте попробуем отредактировать существующую пустую таблицу

crontab -e

Далее выбираем редактор в котором вам удобнее работать, я выбрал nano


Описывать задачи можно таким образом

* * * * * exec/this/one.sh      #скрипт one.sh будет запускаться ежеминутно

15 * * * * exec/this/one.sh     #скрипт one.sh будет запускаться
                                #на 15 минуте каждого часа
                                
0 18 * * 5 exec/this/one.sh > tmp/cron-job-output.log  

# скрипт one.sh будет запускаться каждую пятницу в 18:00 и перенаправлять
# вывод в лог файл                              

Первые пять полей отвечают за

*< *  *  *  *  # Минута [0-59]
*  *< *  *  *  # Час [0-23]
*  *  *< *  *  # День месяца [1-31]
*  *  *  *< *  # Месяц [1-12]
*  *  *  *  *< # День недели [0-6], где 0 - воскресенье
*  *  *  *  *  exec/this/one.sh< #то, что требуется исполнить в нужное время

Условно, если хочется чтобы скрипт запускался каждые два часа то задача будет выглядеть так

0 */2 * * * exec/this/one.sh  # задача one.sh исполнится на 0-й минуте 
                              # каждого второго часа

Если хочется запустить скрипт не на bash, то перед путем к скрипту следует указать путь до интерпретатора


* * * * * /usr/bin/python3 exec/this/one.py

Рекомендую заглянуть на ресурс, там вы найдете подробную документацию, и сможете наглядно потестить условия выполнения задач.

Спасибо за внимание <3