Cron - запуск задач по расписанию в Linux
Что такое cron? Cron - программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Это программа-демон (служба, по аналогии с Windows), которая постоянно размещена и работает в оперативной памяти компьютера, сканируя раз в минуту список установленных задач на наличие актуальной для выполнения в текущий момент времени. Сами инструкции по запуску задач находятся в специально предназначенных crontab-файлах, которые, в свою очередь, находятся в строго отведённых каталогах системы.
Работа с crontab
Crontab - команда, которая используется, для управления планировщиком Cron. Команда crontab создает файл crontab, содержащий команды и инструкции для запуска демона cron.
Добавление файла расписания (запланированные действия будут выполнятся от текущего пользователя):
crontab имя_файла_расписания
Вывести содержимое текущего файла расписания:
crontab -l
Удаление текущего файла расписания:
crontab -r
Редактирование текущего файла расписания
crontab -e
Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:
crontab -u username
Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя.
Управление
Узнать, запущена ли в данный момент утилита крон, позволяет команда: service cron status или systemctl status cron
Для запуска и остановки можно также использовать: service cron start или service cron stop, а так же systemctl start cron или systemctl stop cron
Конфигурационные файлы
Следующие файлы ограничивают доступ к планировщику (по умолчанию они не существуют):
- /etc/cron.allow - если существует, пользователи указанные в этом файле имеют возможность запуска заданий планировщика;
- /etc/cron.deny - если существует, пользователи указанные в этом файле НЕ имеют возможность запуска заданий планировщика.
Если cron.allow существует, только юзерам, перечисленным в нем, разрешено использовать cron, при этом файл cron.deny игнорируется. Если cron.allow не существует, юзерам, указанным в cron.deny, не разрешается использовать планировщик cron. Формат записей в обоих файлах - одно имя пользователя в каждой строке. Пробелы не разрешены. Файлы контроля доступа считываются каждый раз, когда пользователь пытается добавить или удалить задачу cron.
Файлы заданий хранятся в следующих местах:
- /etc/crontab и /etc/cron.d/ - системные записи cron и записи cron различных пакетов;
- /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly - здесь лежат скрипты, которые надо выполнять раз в час, день, неделю и месяц соответственно, обычно эти папки используются различными пакетами, но вы тоже можете их использовать для своих скриптов.
Формат файла cron
.---------------- минута (0 - 59)
| .-------------- час (0 - 23)
| | .------------ день месяца (1 - 31)
| | | .---------- месяц (1 - 12)
| | | | .-------- день недели (0 - 6) (Воскресенье=0 или 7)
| | | | |
* * * * * команда для выполнения
Пример записи в cron:
0 5 * * 1 tar -zcf var/backups/home.tgz /home/
При необходимости можно также указать электронный адрес пользователя:
MAILTO=user@example.org
Если в описании действия команда отправляет текстовое содержимое в стандартный вывод, то программа, при наличии электронного адреса, автоматически перехватит это сообщение и отправит по e-mail.
Примеры
Ниже переведены примеры конфигурации крона для периодического запуска команд: Каждую минуту:
* * * * *
Каждый день в 03:15:
15 3 * * *
Каждый понедельник:
0 0 * * 1
Каждый первый день каждого месяц:
0 0 1 * *
Каждый четный час:
* */2 * * *
Каждые 10 минут:
*/10 * * * *
Каждый будний день в 22:00:
0 22 * * 1-5
Особенности cron
Нужно учитывать следующие особенности при работе с крон:
- Минимальное время составляет одну минуту.
- Файл crontab должен всегда заканчиваться пустой строкой
- Условия времени запуска «день недели» и «день месяца» обрабатываются через логическую операцию «ИЛИ», все остальные условия — через логическое «И».
- Выводы запускаемых команд выводятся в виде сообщений пользователю, но если в файле crontab была определена директива MAILTO – сообщение будет отправлено по указанному в этой директиве e-mail.
Где находятся логи cron
Файлы с логами в каждой системе хранятся по разному. Например в Centos это /var/log/crond, в Ubuntu /var/log/syslog. Так же, если не указанно MAILTO, вывод команд работы скриптов которые запускает крон, можно посмотреть в каталоге /var/spool/mail. В файле пользователя из под которого запускается программа.