Как настроить cron в Linux.

В работе администратора довольно много рутинных задач, которые необходимо периодически исполнять. Бэкапирование сайта, перевыпуск SSL сертификата, запуск скриптов и т.д. Выполнять каждый раз подобные операции в ручном режиме малоэффективно, а с ростом количества таких задач ручное исполнение увеличит время администрирования в геометрической прогрессии.

Cron — механизм, позволяющий запускать выполнение команд и скриптов по расписанию. Если упрощенно, состоит он из таблицы расписания crontab и утилиты cron, которая читает это расписание и исполняет запланированные работы.

Соответственно, первым делом нужно добавить нашу задачу в таблицу. Пусть у нас есть скрипт, делающий бэкап нашего сайта /usr/local/bin/backup_script.sh Давайте настроим его запуск ежедневно, в 3:45 ночи.

Текущие cron задачи хранятся в файле /var/spool/cron/имя_пользователя в нашем случае для рутового пользователя это /var/spool/cron/root Чтобы добавить новую задачу можно либо отредактировать файл непосредственно, используя текстовый редактор, либо использовать:
crontab -e

В открывшемся окне, добавляем следующую строку:
45 3 * * * /usr/local/bin/backup_script.sh > /dev/null 2>&1
данная строка состоит из двух частей:
45 3 * * * — расписание
/usr/local/bin/backup_script.sh > /dev/null 2>&1 — команда.

Расписание состоит из 5 разделов, слева на право — минута, час, день, месяц, день недели. Звездочка * в любом из временных разделов, означает что задача выполняется для любого значения.

Давайте разберем наше расписание: 45 минута, 3 часа, любой день, месяц и день недели. Соответственно, наш скрипт будет запускаться каждый день недели, каждый месяц и каждый день в 3 часа 45 минут. Если мы захотим запускать скрипт раз в неделю в пятницу, то наше расписание примет вид:
45 3 * * 5

Кроме конкретного значения или любого значения, в crontab возможны следующие вариации:
10,20 — несколько значений через запятую для одного раздела, задача будет выполнена для каждого значения, если, это например раздел минут, то в 10 и 20 минуту соответственно.
10-20 — диапазон значений от и до, задача выполняется для каждого значения из диапазона, например в 10, в 11, в 12 и т.д. в 20 минуту.
*/10 — звездочка, деленная на значение, выполнение задачи, например каждые 10 минут.

Со второй частью все еще проще, мы указываем команду или скрипт которые должны быть исполнены в установленное время. В нашем случае это скрипт бэкапа /usr/local/bin/backup_script.sh А так как нам не нужен вывод команды исполняемой cron мы перенаправляем вывод в небытие /dev/null

Проверяем результат, выведем таблицу расписания crontab:

[root@waky ~]# crontab -l
45 3 * * * /usr/local/bin/backup_script.sh > /dev/null 2>&1

Наш скрипт добавлен в расписание.