CRON задания: как добавлять и редактировать


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


Задание будет выполняться в соответствии с установленным расписанием — читать его стоит как «выполнять задание каждые …». Звездочка фактически означает 'каждый/ую'. При указании * * * * * задание будет выполняться каждую минуту и чаще по 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 заданий при отладке.

Сказать спасибо