CRON. Постановка задач в расписание.
Планировщик CRON
Первое, что нужно сделать - произвести запуск cron. Проверим, не запущен ли он уже:
/etc/init.d/cron status
Если в выводе мы видим "running", значит все хорошо, cron запущен. Если демон остановлен, следует выполнить команду
/etc/init.d/cron start
В случае же, если по каким-то причинам он отсутствует в системе, установка cron выполняется командой
apt-get install cron
Однако, на этом подготовительные работы не заканчиваются - нашему планировщику может "мешать" другой планировщик - Anacron. Его отличие заключается в том, что Anacron предназначен больше для настольных систем и позволяет выполнять задания, даже если оно было пропущено в результате, например, того, что машина была выключена. CRON же работает строго по часам. Их совместную работу можно регулировать, и мы опишем эти принципы в отдельной статье, но сейчас от греха подальше удалим Anacron - на сервере 24х7 ему места нет:
apt-get purge anacron
CRON. Синтаксис
Теперь можно со спокойной душой приступать к настройке CRON - для этого существуют специальные файлы заданий cron: /etc/crontab - глобальный файл заданий, /var/spool/cron/crontabs/ - каталог, содержащий файлы заданий по имени пользователя и /etc/cron.d - еще один глобальный каталог с заданиями, однако его использование не рекомендуется. Формат этих файлов одинаков, за исключением того, что в глобальном файле cron, помимо прочего, присутствует указание на пользователя, от имени которого следует запускать задание.
Формат глобального файла
"минута" "час" "день месяца" "месяц" "день недели" "имя пользователя" "задача"
Формат пользовательского файла:
"минута" "час" "день месяца" "месяц" "день недели" "задача"
CRON. Примеры
Чтобы добавить в cron задание /usr/bin/name_of_our_script, выполняемое, скажем, каждые пять минут от имени user, нужно, на примере глобального файла, добавить строчку такого содержания:
*/5 * * * * user /usr/bin/name_of_our_script
Задание, выполняемое cron каждый час в 0 минут:
0 0-23 * * * user /usr/bin/name_of_our_script
Задание, выполняемое cron каждый день в 0 часов 0 минут:
0 0 1-31 ** user /usr/bin/name_of_our_script
Оно же под другим соусом:
0 0 * * 1-7 user /usr/bin/name_of_our_script
Задание, выполняемое cron каждую минуту:
* * * * * user /usr/bin/name_of_our_script
Пользовательские файлы CRON
Не смотря на все вышеописанное, править глобальный файл cron с помощью какого-нибудь текстового редактора является дурным тоном. Вместо это предпочтительнее создавать пользовательские файлы cron в /var/spool/cron/crontabs с помощью промежуточной утилиты, именуемой crontab, которая позволяет проверять корректность синтаксиса, защищая от возможных ошибок. У нее всего 4 ключа: "-l" позволяет получить список заданий для текущего пользователя, "-u" дает возможность указать имя пользователя, вместо того, чтобы использовать имя текущего, "-r" - опасный ключ, удаляет пользовательский файл cron, и, наконец "-e" - ключ, позволяющий создать/произвести редактирование пользовательского файла cron. Просто наберите
crontab -e #Для редактирования от имени текущего пользователя
crontab -u user -e #Для редактирования от имени пользователя user
Вас возможно попросят указать текстовый редактор по-умолчанию, а может и нет, если он уже установлен. В любом случае, как только откроется текстовый редактор, начните правку пользовательского файла cron. По окончанию сохраните изменения, и, если crontab найдет ошибки синтаксиса, он не даст вам записать файл.
В большинстве дистрибутивов Linux, cron ежеминутно экзаменует свои файлы конфигурации на предмет изменений. Однако, чтобы удостовериться, что все изменения применены, нужно выполнить перезапуск cron:
/etc/init.c/cron restart
Или для дистрибутивов с SystemD:
systemctl restart cron.service
В завершении хочется отметить то, что если используете дистрибутив на базе SystemD, такой как Debian версии 8 и выше, Ubuntu версии 15.04 и выше или Fedora, вы наверняка захотите узнать о systemd.timer - встроенном в SystemD механизме запуска сервисов по расписанию. Он вполне может заменить CRON, позволяя вам убрать из системы процесс с дублирующим функционалом.