Многие пользователи сталкивались с тем, что некоторые программы необходимо запускать с определенной периодичностью или по расписанию, но делать это вручную удается далеко не всегда. Чаще всего такого рода потребность возникает на серверных машинах. И если на вашем сервере установлена операционная система семейства Unix (Debian, Centos, FreeBSD, Ubuntu), Cron или как еще его называют, демон-планировщик Cron — это то, что вам нужно.
Как понятно из второго названия, Cron — это специальная программа-планировщик, способная выполнять поставленные задачи по расписанию, причем неоднократно. К слову, выполнить запуск PHP-скрипта Cron также способен, не говоря уже о выполнении более тривиальных задач как в определенный отрезок времени, так и с заданной периодичностью.
Этот планировщик, получая указания от пользователя или пользователей, следует им при выполнении поставленных задач по заданным сценариям. Данные и инструкции для Cron содержатся в специальных таблицах, называемых crontab.
Установка, принцип работы и настройка Cron
Как правило, в большинстве стандартных дистрибутивов Unix-подобных систем демон-планировщик Cron содержится по умолчанию и устанавливается в составе пакета программ. Он уже присутствует на виртуальном хостинге и любом тарифе виртуальных серверах VPS
Если же у вас минимальный пакет установки, то дистрибутив планировщика устанавливается следующим образом:
- Установка для Red Hat:
- Откройте консоль.
- Введите yum install vixie-cron.
- Установка Cron для Debian-подобных систем:
- Откройте консоль.
- Введите apt-get install cron.
После этого можно считать, что планировщик успешно установлен
Команды Cron и принцип работы планировщика
После запуска ОС планировщик выстраивает очередь задач от всех пользователей. Затем он также дополнительно анализирует, есть ли crontab в /var/spool/cron и соответствуют ли файлы задач информации о пользователях, представленной в /etc/passwd. Важно помнить, что каждой учетной записи доступен один crontab, но при этом в нем можно размещать много задач.
После окончания проверки Cron считывает задания и время их исполнения из crontab и, если это необходимо, приступает к запуску сценариев.
Синтаксис crontab имеет такой вид:
[минута][час][день][месяц][неделя][пользователь][команда]
С настройками по умолчанию /etc/crontab выглядит так:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
05 * * * * root run-parts /etc/cron.hourly
09 9 * * * root run-parts /etc/cron.daily
13 8 * * 0 root run-parts /etc/cron.weekly
58 6 3 * * root run-parts /etc/cron.monthly
Из описанного выше следует, что:
- задача из /etc/cron.hourly исполняется в пятую минуту каждого часа;
- задача из /etc/cron.daily будет исполняться ежедневно в девятую минуту девятого часа;
- задача из /etc/cron.weekly будет исполняться каждое воскресенье на тринадцатой минуте восьмого часа;
- задача из /etc/cron.monthly исполняется ежемесячно, в третий день на пятьдесят восьмой минуте шестого часа.
SHELL=/bin/bash означает, что команды из bin/bash будут использоваться для запуска Cron. Если же переменная не была указана, то необходимое значение будет позаимствовано из /etc/passwd для всех пользователей.
HOME=/ — указание корневого каталога.
MAILTO=root указывает, кому отправлять рапорт о выполнении задачи. Если результат выполнения вас не интересует, то в конце сценария следует записать Cron dev null, тогда будет приходить только уведомление об успешном завершении работы сценария или же неудачной попытке.
Выполнив задание, Cron бездействует, но при этом с определенной частотой проверяя crontab на появление новых заданий. При появлении новых заданий программа ставит их в очередь на выполнение.
Настройка Cron (Centos, FreeBSD, Ubuntu)
Добавить задание в Cron, как и выполнить настройку уже существующего сценария, можно через консоль следующим образом:
- Для начала решите, какие программы будут выполняться, а также узнайте путь к ним. Последнее можно сделать, перейдя в каталог с программой и используя команду cd.
- Далее, используя команду pwd, посмотрите полный путь к месту размещения нужной программы. При этом убедитесь, что у вас есть права на чтение и исполнение необходимого файла.
- Наберите команду crontab -e. После ее выполнения откроется редактор vi, где и будет выполняться настройка Cron относительно отдельно взятого сценария.
Выше уже упоминался формат Cron-команд, который указывается без скобочек и подчиняется следующим ограничениям:
- в поле [минута] можно вводить значения от 0 до 59;
- в поле [час] можно вводить значения от 0 до 23;
- в поле [день] можно вводить значения от 1 до 31;
- в поле [месяц] можно вводить значения от 1 до 12;
- в поле [неделя] можно вводить значения от 0 до 7.
Важной особенностью команды Cron является то, что каждому параметру можно задать не одно, а несколько значений. В таких случаях каждое из них задается через запятую. Фактически это будет означать, что задача должна выполняться в каждый отрезок времени. Также можно указать интервал значений, используя значок «-», и это будет означать, что задание необходимо выполнять ежедневно, каждый час или месяц.
Формат Cron предполагает, что в строке содержится только одна команда. При этом после строки (даже если она была единственной) вы должны нажать клавишу Enter, иначе сценарий не будет принят к исполнению. И если вы допустите ошибку при заполнении нового задания, после его сохранения программа укажет вам на нее. Далее все просто — исправляете ошибку и заново сохраняете сценарий.
Напоследок, для лучшего понимания работы планировщика, представим вашему вниманию актуальные примеры crontab для FreeBSD и любых других Unix-подобных систем.
- Выполнение команды из crontab каждые 5 минут */5 * * * * /home/user1/script.pl
- Задача будет исполняться каждые 5 часов на 1-й минуте 1 */5 * * * /home/user1/script.pl
- Выполнение поставленной задачи ежемесячно 1-го числа на 9-й минуте 8-го часа 9 8 1 * * /home/user1/script.pl
Еще одной примечательной особенностью программы является то, что после изменения в сценарии вам не нужно выполнять перезапуск Cron, потому что планировщик подхватывает изменившиеся данные автоматически. Если же сбой все-таки случился, и программа не распознала измененные данные, то Cron reboot можно выполнить через терминал при помощи команды sudo /etc/init.d/cron restart. После перезапуска все изменения наверняка будут отмечены планировщиком.
У вас остались вопросы относительно работы демоном-планировщиком Cron или все еще не слишком понятен синтаксис crontab для Ubuntu или любой другой Unix-системы? Вы можете обратиться за помощью к сотрудникам нашей техподдержки. Одним из многочисленных преимуществ использования хостинга от RigWEB является не только стабильность серверов, но и квалифицированные специалисты, которые всегда готовы ответить на ваши вопросы и оказать поддержку в решении любых вопросов в рамках своей компетенции.
Пользуйтесь профессиональным хостингом от RigWEB и достигайте максимальной продуктивности при работе над своими проектами!