CRON — часть ядра операционной системы позволяющая выполнять задания по определенному расписанию. В качестве задания используется какая-то консольная команда или скрипт.
Посмотреть список заданий можно выполнив
crontab -l
Ключ -l здесь — list
Выполняется от имени того пользователя от имени которого запускается скрипт или выполняется команда, добавленная в CRON
crontab -e
Ключ -e — edit
Использование CRON — пример
Добавим задание согласно которому каждые десять минут будет удаляться абстрактный каталог с логами
От имени системного пользователя 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 минут каждый вторник.
Чаще всего для небольшого сервера использование CRON этим ограничивается, однако существуют и другие возможности.
Все файлы, имеющие отношение к 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 таким образом удобно перемещать между серверами и делать это можно скриптом — необходимости прописывать их вручную для каждого пользователя в системе нет