Настройка планировщика Cron в Linux
Планировщик заданий является по праву одним из важных компонентов системы. По умолчанию, в дистрибутивах Linux, а также FreeBSD, используется планировщик заданий Cron. Рассмотрим как его настроить.
Настроить cron можно несколькими способами. Самый простой и быстрый - указать задание руками в файл /etc/crontab. Проблема в том, что это может сделать только пользователь root.
Структура файла /etc/crontab представляет собой последовательность установок даты и времени, имени пользователя от которого выполняется задача и явное указание исполняемого файла.
# m h dom mon dow user command
# - строка закомментирована, т.е. не выполняется планировщиком
m - минуты. Диапазон значений 0-59
h - часы. Диапазон значений 0-23.
dom - day of month - день месяца (число). Диапазон значений 1-31
mon - месяц. Диапазон значений 1-12
dow - day of week - день недели. указывается числом, где 0 - воскресенье, 6 - суббота.
user - пользователь от которого выполняется задача.
command - выполняемая задача.
Важно! Значения минут, часов, дней месяца, дней недели, а также месяца могут быть * (звездочкой) принимая все доступные значения. Также можно использовать список параметров разделенных запятой.
Примеры разберем подробнее немного позже.
Простым пользователям доступна системная утилита crontab. Для гибкости использования используются параметры:
crontab -e |
Используется для редактирования или создания файла расписания для текущего пользователя |
crontab -l |
Вывод существующих задач в расписании пользователя |
crontab -r |
Удаление файла расписания текущего пользователя |
crontab -u username |
Работа с расписаниями указанных пользователей. Выполняется только от пользователя root |
Добавим задание.
Для этого в консоли пишем команду:
crontab -e
Запустится редактор файла используемый по умолчанию (Ubuntu - nano/vi, FreeBSD - ee), в нашем случае mcedit из пакета Midnight Commander.
Синтаксис команд идентичен как и для файла /etc/crontab, за исключением отсутствия параметра имени пользователя. Это значит, что после сохранения файла, все задачи будут выполняться от текущего пользователя.
Сохраняем файл, выходим из редактора и проверяем список заданий crontab -l.
Проверим как работает удаление файла заданий - crontab -r.
Важно! Программа не спрашивает уверены ли вы в удалении файла заданий. Если нужно удалить конкретное задание, следует использовать crontab -e.
Для администратора важно, чтобы не все пользователи могли пользоваться планировщиком. Для этих целей можно использовать файлы /etc/cron.allow и /etc/cron.deny (в некоторых дистрибутивах эти файлы должны размещаться в /etc/cton.d). По умолчанию, использование cron разрешено всем пользователям.
Примеры использования в файле /etc/crontab.
Выполнение задачи каждые 5 минут от пользователя root:
*/5 * * * * root /root/scripts/script1.sh
В полдень и полночь:
0 */12 * * * root /root/scripts/backup.sh
Перезагрузка сервера в 0:00 в первый день месяца (исключительно как пример):
0 0 1 * * root reboot
Выполнение скрипта с понедельника по пятницу в полночь:
0 0 * * 1-5 root /root/script/backup_db.sh
Неправильный пример:
* 0 * * 1-5 root /root/script/backup_db.sh
Ошибка в том, что скрипт будет запускаться с понедельника по пятницу каждую минуту с 0:00 по 0:59
В заданиях назначаемых через crontab -e (т.е. от текущего пользователя) не указывается параметр имени пользователя, в случае примеров - root.
На что еще следует обратить внимание:
Все пути до исполняемых файлов следует писать абсолютными.
Скрипты исполняются из корневой директории, а следовательно, при написании скрипта следует указывать рабочий каталог, либо абсолютные пути до целевых файлов (если в ходе работы скрипта генерируются файлы-отчета и им подобные)