CRON задания позволяют выполнять скрипты и любые консольные команды с заданной периодичностью по расписанию. Рассмотрим как посмотреть список заданий и как добавить новое задание.
Посмотреть список заданий можно выполнив
crontab -l
Ключ -l здесь — list
Выполняется от имени того пользователя от имени которого запускается скрипт или выполняется команда, добавленная в CRON
crontab -e
Ключ -e — edit
Добавим задание согласно которому каждые десять минут будет удаляться абстрактный каталог с логами (в реальных системах удаление логов выполняется обычно за счет logrotate)
От имени системного пользователя root выполняем:
crontab -e
Открывается /etc/crontab в одном из текстовых редакторов (nano, vi, mcedit) — при первом вызове crontab -e редактор нужно выбрать
Создаем задание:
10 * * * * cd /var/www/web/sites/example.com && rm -rf logs
10 * * * * — выполнять каждые 10 минут
cd /var/www/web/sites/example.com && rm -rf logs — непосредственно две простейшие команды разделенные &&, что означает, что вторая команда будет выполнена только если успешно выполнится первая
Задание будет выполняться в соответствии с установленным расписанием — читать его стоит как «выполнять задание каждые …». Звездочка фактически означает 'каждый/ую'. При указании * * * * * задание будет выполняться каждую минуту и чаще по CRON запускать какой-либо скрипт не получится.
Поле под minute может принимать значения от 1 до 60 (или * как для всех других), hour — от 1 до 12, day of month — от 1 до 31, month — соответственно от 1 до 12 и day of week — от 1 до 7.
В последнем примере на картинке скрипт или команда, помещенные в задание будут выполняться в 2 часа 5 минут каждый вторник.
Сложные для восприятия указания периодичности выполнения можно проверять пользуясь сервисом
На сервере задания будут сохраняться в /var/spool/cron/. Чаще всего использование CRON этим ограничивается, однако существуют и другие возможности.
Как запускать CRON задания из /etc/cron.d
Все файлы, имеющие отношение к CRON можно вычислить выполнив в консоли whereis cron
whereis cron
cron: /usr/sbin/cron /etc/cron.daily /etc/cron.weekly /etc/cron.hourly /etc/cron.d /etc/cron.monthly /usr/share/man/man8/cron.8.gz
Пять из файлов в выводе могут оказаться полезны
/etc/cron.hourly
Ежечасные задания, выполняющиеся по расписанию
/etc/cron.daily
В этот файл прописываются задания которые должны выполняться один раз в день
/etc/cron.weekly
Здесь задания которые должны выполняться один раз в неделю
/etc/cron.monthly
Задания, которые буду выполняться один раз в месяц
/etc/cron.d
Если необходимо на одном сервере запускать множество списков CRON заданий от имени разных пользователей.
Файлы с этими заданиями удобно поместить в /etc/cron.d
echo "10 * * * * user cd /var/www/web/sites/example.com && rm -rf logs" > /home/user/deletelogs.sh
В конец каждого файла с заданиями дописываем пустую строку — такой синтаксис обязателен.
cat /home/user/deletelogs.sh > /etc/cron.d/deletelogs
CRON задания таким образом удобно перемещать между серверами и делать это можно скриптом. Необходимости прописывать их вручную для каждого пользователя в системе нет, задание представляет собой простой файл.
Читайте про запуск заданий по CRON каждые 5 минут и про отслеживание CRON заданий при отладке.