Настройка планировщика Cron в Linux

27 Июля 2018

Иногда при работе с сайтом администратору приходится по множеству раз выполнять аналогичные действия. Например, это может быть мониторинг за его доступностью, смена стоимости товаров в каталоге или отдельной категории, переиндексация ссылок, ротация учетных журналов или систематическое архивирование и копирование копии базы данных для последующего восстановления в экстренных ситуациях. Если вы используете Linux Хостинг, то автоматизируйте такие действия через настройку планировщика Cron в Linux.

В Cron в Linux имеется таблица расписания. Она расположена по адресу /etc/crontab. Это небольшой файл, где подробно указан список всех команд и расписан график их последовательного исполнения. Давайте рассмотрим в Linux Cron примеры с параметрами:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Помимо параметров в файле указывается и расписание, оно находится в следующих строках:

# run-parts
01 * * * * root nice -n 19 run-parts -report /etc/cron.hourly
02 4 * * * root nice -n 19 run-parts -report /etc/cron.daily
22 4 * * 0 root nice -n 19 run-parts -report /etc/cron.weekly
42 4 1 * * root nice -n 19 run-parts -report /etc/cron.monthly

Важно обратить учесть заданные параметры и переменные:

  • SHELL — предназначен для задачи запускаемой программы;
  • PATH — путь, по которому можно найти расположение программ;
  • MAILTO — логин клиента, получающего отчет об исполнении поставленной задачи;
  • HOME — домашний каталог crond.

Последние 4 строки из примера показывают таблицу расписания. Из неё следует, что программы, расположенные в каталоге /etc/cron.hourly будут выполняться с регулярностью в 1 час, расположенные по адресу /etc/cron.daily — ежедневно, эти /etc/cron.weekly — раз в неделю, и наконец, находящиеся здесь /etc/cron.monthly — ежемесячно.

Давайте рассмотрим наглядно такой пример. Допустим, требуется ежедневно выполнять команду update_av ftp://server.ru/bases/. В каталоге /etc/cron.daily для этого потребуется создать отдельный файл update_av содержащий:

#!/bin/bash
ftp://server.ru/bases/

По-сути, это будет сценарий bash. Для того, чтобы сделать его исполняемым, нужно добавить:

# chmod +x update_av

Иногда может возникнуть необходимость в создании максимально точного расписания. Для этого нужно разобраться, в Cron Linux как добавить задание такого типа. Для примера давайте возьмем пару программ, одна из которых будет исполняться в 7:00, а другая следом за ней в 7:20. Стандартный сценарий эту проблему решить не сможет, поэтому нужно изучить в каком формате выводятся отдельные элементы нашего расписания:
минуты (0−59) часы (0−23) день (1−31) месяц (1−12), далее идет день_недели (0−6, 0 — Вс), ну и сама выполняемая команда

Для реализации сценария в файл Крон Линукс по адресу etc/crontab потребуется вписать:

0  7 * * * /usr/bin/command1 arguments
20 7 * * * /usr/bin/command2 arguments

В Cron Linux команды описанные выше будут теперь запускаться ежедневно строго по графику — первая в 7:00, вторая в 7:20.

Поняв, как выглядит формат файла crontab, можно легко редактировать и стандартную таблицу расписаний. Изначально в ней заложено, что ежедневные команды запускаются на выполнение в 4:00. Но, если вы отключаете сервер на ночь для экономии расхода электроэнергии, то они не будут выполнены в заданное время. Давайте изменим его на более приемлемое, например, на 9:20 ура. Для этого в таблице расписаний нужно указать:

02 9 * * * root nice -n 19 run-parts -report /etc/cron.daily

Практически точно так же выполняется настройка Cron Linux при необходимости выполнения заданной программы 1 раз еженедельно. Стандартно такие задачи запускаются в 4:22 и почему-то в воскресение. И если у нас не веб-сервер, то нет смысла его держать постоянно включенным, особенно на выходных, поэтому давайте отредактируем исходные данные и установим более удобное время, например, пусть задачи выполняются утром в понедельник, в 8:22. Для этого прописываем в графике расписаний следующую строку:

22 8 * * 1 root nice -n 19 run-parts -report /etc/cron.weekly
Можно и вовсе не пользоваться стандартным файлом конфигурации расписания, а изначально сделать свой собственный. Его редактирование выполняется командой crontab -e. При этом редактирование будет проведено под именем текущего пользователя, когда не было указано другого.

Разумеется, администраторы с правами root могут корректировать расписания, созданные под любым именем. Для этого в команду добавляется ещё один параметр -u, например:

crontab -e -u hosting
Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent