Cron
− фоновый системный процесс, который позволяет в Unix-подобных системах автоматически запускать команды или скрипты по определённому расписанию. Cron
удобен, когда нужно регулярно выполнять какие-то задачи, например, при создании резервных копий, синхронизации файлов, отправке отчётов или при проведении каких-либо периодических работ по обслуживанию системы. Сам cron
работает в фоновом режиме и постоянно сканирует наличие задач на выполнение в текущий момент времени.
Автоматизация задач с использованием cron
Для расписания заданий в cron
используется специальный формат строки, который состоит из пяти полей: минута, час, день месяца, месяц, день недели. Символ *
применяется для указания любого значения каждого из этих полей. К примеру, строка 0 2 * * *
означает, что команда будет запускаться каждый день в 2 часа ночи. Если прописать данную строку, например, как */30 * * * *
, то это будет означать выполнение задания каждые 30 минут. В свою очередь, чтобы задать время выполнения как каждое 3-е и 21-е число каждого месяца в 23:45, то необходимо использовать следующий формат данной строки: 45 23 3,21 * *
.
Чтобы добавить, удалить или изменить задание, обычно используется команда crontab -e
. Данная команда открывает файл crontab, где можно вносить изменения в расписание заданий. Для открытия файла система использует дефолтный текстовый редактор. Например, для Debian и Ubuntu это nano
, для CentOS − vi
. Файл crontab − это текстовый файл, в котором пользователь или система указывает команды, которые нужно выполнять по определённому расписанию. Команда crontab -e
открывает этот файл не напрямую в файловой системе, а через обёртку, которая сохраняет его в нужное место и следит за его правильным форматом. Если указать некорректное время, например, 69 2 * * *
, то при выходе из файла вы увидите сообщение об ошибке.

Файл crontab индивидуален для каждого пользователя, и cron
запускает команды от имени той учётной записи, которой он принадлежит. При сохранении система кладёт файл в специальный каталог, такой как /var/spool/cron/crontabs/
. Более того, прямой доступ к этому файлу часто ограничен.
Планировщик проверяет данный файл каждую минуту, и если находит совпадение по времени, то запускает указанную команду.
Редактирование заданий с использованием crontab
Пример задания, которое можно добавить при помощи команды crontab -e
, выглядит как:
30 3 * * 5 /home/your-user/scripts/backup.sh
В данном случае:
30
− минута, когда будет выполняться команда;3
− час, когда будет выполняться команда;*
− означает, что команда будет выполняться в любой день месяца;*
− означает, что команда будет выполняться в любой месяц;5
− день недели, когда будет выполняться команда (в данном случае каждую пятницу, то есть в каждый пятый день недели);/home/your-user/scripts/backup.sh
− полный путь к скрипту, который будет запускаться планировщиком в соответствии с указанным перед ним временем.
Просмотреть текущий список заданий можно при помощи команды crontab -l
. Её использование удобно для быстрого просмотра расписания без редактирования.
Команда crontab -r
удаляет текущий crontab-файл пользователя. Будьте осторожны − данная команда не выводит никаких подтверждений, задания исчезают сразу.

Автоматизация системных задач
В crontab-файле нельзя указать, под каким пользователем необходимо выполнять команду. Команда всегда будет запускаться от имени текущей учётной записи, в отличие от системного файла /etc/crontab
, где нужно прописать имя пользователя явным образом.
Файл /etc/crontab
− это системный crontab-файл. Данный файл читается напрямую демоном cron
без использования команды crontab
.
Открыть данный файл можно при помощи доступного текстового редактора, например:
$ sudo vi /etc/crontab
Или:
$ sudo nano /etc/crontab
Обратите внимание, что файл /etc/crontab
можно редактировать только с правами суперпользователя, то есть с использованием sudo
. Данный файл является системным, и его владельцем является root
. Файл содержит задания, которые могут выполняться от имени любых пользователей, включая учётную запись root
. Именно для предотвращения случайных изменений доступ к файлу /etc/crontab
ограничен.
Каждая строка в файле /etc/crontab
имеет шесть полей, а не пять, как в пользовательском crontab-файле. Шестым является поле, содержащее имя учётной записи, от имени которой необходимо выполнить команду. Данное поле должно располагаться между временем запуска и указанием на запланированную команду или скрипт. Например:
30 3 * * 5 your-user /usr/local/bin/backup.sh
При этом следует учитывать, что пользователь your-user
должен существовать в системе и иметь права на выполнение указанного скрипта.
Подобным же образом можно указывать учётную запись суперпользователя:
30 3 * * 5 root /usr/local/bin/backup.sh
Данный аспект является одним из главных преимуществ системного crontab-файла. Чаще всего именно root
указывают, чтобы запускать по расписанию системные скрипты с административными правами.