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 минут, в воскресенье."