CRON - процесс, планировщик заданий. Необходим для выполнения определенных команд в заданное время в автоматическом режиме - от ротации файлов до запуска или остановки различных программ. Выполняет задание от любого заданного пользователя. Прост в настройке и минимален в плане использования системных ресурсов.

Управлять им можно как через терминал, так и через webmin.

Задание команд и времени в cron

Для того, чтобы просмотреть задания в терминале, необходимо указать команду:

crontab -l

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

crontab -e

и указать выполнение нужных действий с таком формате:

1
2
3
4
5
6
7
8
 * * * * * выполняемая команда
 - - - - -
 | | | | |
 | | | | ----- Дни недели (0 - 7) (Воскресенье =0 или =7)
 | | | ------- Месяцы (1 - 12)
 | | --------- Дни (1 - 31)
 | ----------- Часы (0 - 23)
 ------------- Минуты (0 - 59)

Примеры использования cron:

0 2 * * * /bin/sh /home/user/file

Выполнение скрипта /home/user/file в 2 часа 0 минут ежедневно, ежемесячно и в любой день недели.

0/15 * * * * /bin/sh /home/user/file

Выполнение скрипта /home/user/file через каждые 15 минут ежедневно, ежемесячно и в любой день недели.

0 6-22 * * * /bin/sh /home/user/file

Выполнение скрипта /home/user/file через каждый час с 6.00 до 22.00 ежедневно, ежемесячно и в любой день недели.

0 0/2 * * * /bin/sh /home/user/file

Выполнение скрипта /home/user/file через каждые 2 часа 0 минут ежедневно, ежемесячно и в любой день недели.

MAILTO=mail@example.com 0 2 * * * /bin/sh /home/user/file

Выполнение скрипта /home/user/file в 2 часа 0 минут ежедневно, ежемесячно и в любой день недели c отправкой отчета на электронный адрес mail@example.com.

Кроме даты можно использовать ряд специальных строк:

1
2
3
4
5
6
@reboot - выполнять команду при перезагрузке
@yearly или @annually - выполнять 1 января, аналогично записи: "0 0 1 1 * "
@monthly - выполнять 1 числа каждого месяца, аналогично "0 0 1 * * "
@weekly - выполнять каждое воскресенье, равносильно "0 0 * * 0"
@daily или @midnight - ежедневно в полночь,"0 0 * * * "
@hourly - раз в час, "0 * * * * "

Периодическая отправка текста из файла с помощью cron и mail

Небольшое дополнение, т.к. данная информация нередко бывает нужна. Итак, задача: kаждые 2 часа отправлять текст из файла на определенную почту.

0 0/2 * * * cat text | mail -s subject post@example.com

В данном случае текст из файла text будет отправлен письмом на почту post@example.com с темой subject