Мар 062024
 

Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.

Шаблон задания для Cron выглядит примерно так:

Минуты(0-59) Часы(0-24) День(1-31) Месяц(1-12) День недели(0-6) Команда
Для отображения содержимого crontab-файла текущего пользователя используйте команду:

$ crontab -l

Для редактирования заданий пользователя есть команда:

$ crontab -e

Ниже приведены несколько примеров cron-заданий:

Чтобы выполнять команду каждую минуту, задание должно быть такое:

* * * * * <исполняемая-команда>

Похожее задание, только команда будет вызываться каждые пять минут:

*/5 * * * * <исполняемая-команда>

Вызывать команду 4 раза в час (каждые 15 минут):

*/15 * * * * <исполняемая-команда>

Чтобы выполнить команду каждый час в 30 минут, пишем:

30 * * * * <исполняемая-команда>

Т. е. команда будет выполняться не каждые 30 минут, а тогда, когда значение минут будет равно 30 (например, 10:30, 11:30, 12:30 и т. д.).
Значения времени можно комбинировать, перечислив их через запятую. Следующий код будет выполнять команду три раза в час: в 0, 5 и 10 минут.

0,5,10 * * * * <исполняемая-команда>

Выполнять команду каждый час будет следующее задание:

0 * * * * <исполняемая-команда>

Выполнение команды каждые два часа:

0 */2 * * * <исполняемая-команда>

Чтобы выполнять команду каждый день (в 00:00):

0 0 * * * <исполняемая-команда>

Выполнение команды каждый день в 03:00:

0 3 * * * <исполняемая-команда>

Выполнение команды каждое воскресенье (sunday):

0 0 * * SUN <исполняемая-команда>

Другой вариант задания, которое будет выполнять команду каждое воскресенье (естественно, тоже в 00:00):

0 0 * * 0 <исполняемая-команда>

Выполнение команды каждый день с понедельника по пятницу:

0 0 * * 1-5 <исполняемая-команда>

Следующее задание будет выполнять команду каждый месяц, 1-го числа в 00:00:

0 0 1 * * <исполняемая-команда>

Выполнять команду в 16:15 каждого первого числа месяца будет это задание:

15 16 1 * * <исполняемая-команда>

Выполнение команды каждые три месяца:

0 0 1 */3 * <исполняемая-команда>

Выполнение команды в строго определённое время и месяц:

5 0 * 4 * <исполняемая-команда>

Задание будет вызывать команду в начале каждого полугодия (в 00:00 1-го дня):

0 0 1 */6 * <исполняемая-команда>

Выполнение команды каждый год 1-го января в 00:00:

0 0 1 1 * <исполняемая-команда>
Настройка cron для web программистов
1. Добавляем в cron задачу, которая будет выполнятся каждую минуту.
Набираем crontab -e и добавляем (будет выполняться под тем пользователем под кем вы зашли в SSH)

*/1 * * * * /usr/bin/php -q /server/cron/cron.php > /dev/null 2>&1

сохраняемся (SHIFT+Z 2раза )
Примечание:
*/1 * * * * — означает что скрипт будет запускаться каждую минуту
> /dev/null — означает отправку результатов, которые выдаст скрипт, в никуда.
2>&1 — избавляет администратора сервера от писем, если скрипт закончит работу с ошибками

2. для отправки на почту воспользуемся mutt (почтовый клиент)
2.1.

apt-get install mutt

2.2. Набираем crontab -e и добавляем

0 */1 * * * /usr/bin/php -q /server/cron/cron.php > /server/cron/cron.txt && mutt my@email.com -s cron-result < /server/cron/cron.txt

сохраняемся (SHIFT+Z 2раза)
Примечание:
добавляем в cron задачу, которая будет выполнятся каждый час (в ноль минут), сохранит результат выполнения скрипта в файл и отправит его на почту с темой cron-result (в нашем случае в теле письма, но можно и приложением).

3. Иногда надо запускать по cron скрипт который лежит уже на сайте (и использует окружение сайта)
*/5 * * * * /usr/bin/wget —no-check-certificate -O /dev/null https://www.linuxshop.ru/cronit.php
Примечание:
1. wget — как бы выкачивает скрипт (что нам и нужно веб сервер его исполняет)
2. —no-check-certificate не проверять сертификат https
3. -O /dev/null — не сохранять выкаченный файл.

Важно учитывать, что запуск команд привязан к серверному времени и к часовому поясу (timezone). Чтобы узнать второй параметр, можно обратиться к службе поддержки хостинга или ввести команду date в командную строку.

Существуют уже готовые команды, которые позволяют задать параметры выполнения скрипта. Они выглядят так:

@reboot — команда выполнится один раз при перезагрузке системы;
@yearly (или @annually) - запускать задание один раз в год в полночь (12:00) 1 января. Эквивалент 0 0 1 1 *.
@annually — вариация команды @yearly, делает то же самое, но в Новый год;
@monthly - запускать заданное задание один раз в месяц в полночь первого дня месяца. Эквивалент 0 0 1 * *.
@weekly - запускать задание раз в неделю в полночь воскресенья. Эквивалент 0 0 * * 0.
@daily - запускать задание один раз в день в полночь. Эквивалент 0 0 * * *.
@midnight — срабатывание раз в день в полночь;
@hourly - запускать заданную задачу один раз в час в начале часа. Эквивалент 0 * * * *.

Записи с готовыми командами выглядят следующим образом:

@monthly <исполняемая-команда>

Команда просмотра логирования выполнения Cron

grep CRON /var/log/syslog

Полезные ссылки:
НАСТРОЙКА CRON
Автоматический перезапуск сервиса Linux
Как в crontab ubuntu перезапускать сервис?
Linux — Выполнение по расписанию — crontab
Кунг-фу стиля Linux: запуск команд
Cron
Генератор Cron

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)