CronTab

Материал из Мои заметки
Перейти к: навигация, поиск

CRON

cron — классический демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные директории. В системах на базе systemd фактически замещен встроенным в него механизмом systemd.timer.

Файлы crontab, создаваемые для отдельных пользователей, находятся в каталоге[1] /usr/spool/cron/crontabs/ или /var/spool/cron/tabs/. Редактировать их вручную не рекомендуется, для этого используют команду crontab -e. Файлы crontab, используемые для управления всей системой, располагаются в директории /etc/cron.d/. Кроме того, в директориях /etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/ размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно). CronTab – это утилита позволяющая в определенный день и час автоматически запускать различные программы или скрипты. Согласитесь, очень удобно.
Структура файла с заданиями для CronTab.
* * * * * command
- - - - -
| | | | |
| | | | +----- День недели (0 - 6) (Sunday=0)
| | | +------- Месяц года (1 - 12)
| | +--------- День месяца (1 - 31)
| +----------- Час для запуска (0 - 23)
+------------- Минута часа для запуска (0 - 59)
command запускаемая программа или скрипт.
Значок * задаёт параметр (день, год, месяц, час).
Пример:

*/5 * * * * command

Запускать задание Cron каждые 5 минут

01 * * * * command

запуск программы или скрипта каждый час в одну минуту.

* 6 * * * command

запуск программы или скрипта каждый день в 6 часов утра.

Значения могут быть числом, трех-буквенным названием, а так же диапазоном например запись «1-5» в поле day будет означать «с понедельника по пятницу».
Значения могут отделяться запятыми: «1,15,31» в поле day будет запускать указанную команду 1-го, 15-го и 31-го числа каждого месяца.
Все пять полей времени допускают использование символа звездочка – «*», который обозначает «использовать любое допустимое значение» для этого поля.
Для создания задания используйте ниже приведённые команды:

crontab -e Изменит Ваш crontab файл или создаст новый.
crontab -l Отобразит содержимое существующего crontab файла.
crontab -r Удалит Ваш crontab файл.
crontab -v Отобразит когда в последний раз Вы изменяли свой crontab файла.

Сложно работать с консольным редактором? Правьте файлы привычным текстовым редактором...
Например используйте Gedit.
Файлы с заданиями можно найти тут:

/usr/lib/cron - Основной каталог команд, связанных со временем.
/usr/spool/cron/crontabs - Каталог файлов регулярных действий.
/usr/lib/cron/log - Учетная информация.
/usr/lib/cron/cron.allow - Список пользователей, которым разрешено выполнять команду crontab.
/usr/lib/cron/cron.deny - Список пользователей, которым запрещено выполнять команду crontab.

Все поля обязательны для заполнения. Не сложно догадаться что первые 5 отвечают за определения периодичности запуска команды, а последняя собственно команда или полный путь к скрипту. Таким образом, чтобы запустить наш скрипт резервного копирования раз в 10 минут надо вписать следующую строчку.

*/10 * * * * /home/user/backup-script

* - значит все возможные варианты,
/ - служит для определения периодичности выполнения задания.
Если нужно будет выполнять скрипт раз в 3 часа впишите в значения часы */3 а в минуты просто *, если раз в сутки — впишите */23, ну почти сутки.
Так же в одно поле можно вводить несколько значений через запятую, например если хотите выполнять скрипт 1ого, 5ого, и 25ог числа каждого месяца введите 1,5,25 вместо третей звёздочки.
Ещё можно вводить промежуток времени, если ,допустим, в часы ввести 12-17 то скрипт будет выполняться с 12 до 17 включительно раз в час.
Ну вот и всё, в заключение пару примеров:

0 */3 * * 2,5 /home/user/backup-script
#Каждые три часа только по вторникам и пятницам
15 */3 * * * /home/user/backup-script #Каждые три часа в 15 минут
45 15 * * 1 /home/user/backup-script #По понедельникам в 15:45
13 13 13 * 5 /home/user/backup-script #в пяnницу 13 числа в 13 часов 13 минут
30 00 * * 0 /home/user/backup-script #Раз в неделю по воскресеньем в 00:30
Выбор времени выполнения задания

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

минута час день_месяца месяц день_недели команда 
| Значение   | Диапазон | Дополнительно                                             |
| минуты     |   0-59   |                                                           |
| часы       |   0-23   |                                                           |
| дни месяца |   1-31   |                                                           | 
| месяцы     |   1-12   | можно задавать и в 3-х буквенном варианте                 | 
| дни недели |   0-6    | можно задавать и в 3-х буквенном варианте (0=воскресенье) |

Символ '*' подразумевает - любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.

| Дни недели и месяца в трех буквенном варианте:  |
| sun mon tue wed thu fri sat                     |
| jan feb mar apr may jun jul aug sep oct nov dec |

Дополнительные переменные cron

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


Crontab от root в Ubuntu

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

/etc/crontab

Для выключения Ubuntu по расписанию нужно внести следующие изменения в файл /etc/crontab:

* 21 * * * root shutdown -h 10 "Система будет выключена через 10 минут, каждый день."
* 9 * * 6 root shutdown -h 10 "Система будет выключена через 10 минут, в субботу."
* 9 * * 0 root shutdown -h 10 "Система будет выключена через 10 минут, в воскресенье."