Ужасный и могучий CRON. Учимся пользоваться.

Планировщик заданий есть не только в Windows. У нас товарищи в Linux есть страшный и ужасный CRON. Cron — классический демон (компьютерная программа в системах класса UNIX), использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории. Конечно он уже потихоньку устаревает и на его замену приходит системы на базе systemd  и его механизм systemd.timer. Но он все равно актуален и сейчас.

Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя.Так же есть и crontab файл системы. Для редактирования файла crontab используется специальная одноимённая программа crontab, позволяющая не прерывать процесс cron на время редактирования.

Вывести содержимое текущего файла расписания:
crontab -l
Удаление текущего файла расписания:
crontab -r
Для редактирования файла crontab вашего пользователя используется команда:
crontab -e
Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:
crontab -u username
Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя.

Основные настройки.

Выбор среды для исполняемых задач:

SHELL=/bin/bash

Имя пользователя, которому будет послано сообщение о выполнении задания:

MAILTO=username
Вместо имени, также можно использовать электронный адрес,Если нужно получать сообщения об ошибках на несколько адресов, укажите все эти адреса через запятую.
MAILTO=example@mail.com 

Время запуска представляется в таком виде:

минута  час  день_месяца  месяц  день_недели  команда

  01           1         12                     2                *            ~/script.sh   В 1.01   12 февраля запустить script.sh символ ‘*’ подразумевает — любое значение.

Значение Диапазон Дополнительно
минуты 0-59
часы 0-23
дни месяца 1-31
месяцы 1-12 можно задавать и в 3-х буквенном варианте
дни недели 0-7 можно задавать и в 3-х буквенном варианте (0=воскресенье и 7)
Дни недели sun mon tue wed thu fri sat
Месяц jan feb mar apr may jun jul aug sep oct nov dec

Также в cron есть переменные:

Переменная Описание
@reboot Запуск при загрузке
@yearly Раз в год
@annually Тоже что и @yearly
@monthly Раз в месяц
@weekly Раз в неделю
@daily Раз в день
@midnight В полночь (00:00)
@hourly Каждый час

@daily ~/script.sh  Запустить рас в день скрипт.

Для каждого конкретного параметра можно задать несколько значений через запятую. Например, если в поле «часы» написать 1,4,22, то задание будет запущено в 1 час ночи, в 4 часа утра и в 22 часа. Можно задать интервал — 4-9 будет означать, что программу нужно запускать каждый час в период с 4 до 9 часов включительно. Символ ‘/‘ служит для указания дополнительной периодичности задания. Например, ‘*/3‘ в поле «часы» означает «каждые три часа».

0 */1 * * * /home/u12345/script.sh выполнять задание раз в час в 0 минут.

Примечание: если определены оба поля «день месяца» и «день недели» (т.е не равны *), то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца. Например, следующая команда будет выполняться в 13 часов 13 минут каждую пятницу и каждое 10 число месяца, даже если 10 число не совпадет с пятницей.

13 13 10 * 5 /home/u12345/script.sh

ОГРАНИЧЕНИЯ.

Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов, и так далее.