Cron - запуск задач по расписанию в Linux

26.12.2020 Софт

Что такое 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. В файле пользователя из под которого запускается программа.