Формат Linux Crontab
MIN HOUR DOM MON DOW CMD
Таблица: Поля и допустимые диапазоны Crontab (синтаксис Linux Crontab)
Поле | Описание | Допустимое значение |
---|---|---|
MIN | Минуты | От 0 до 59 |
HOUR | Часы | От 0 до 23 |
DOM | День месяца | 1-31 |
MON | Месяц | 1-12 |
DOW | День недели | 0-6 |
CMD | Команда | Любая команда, которую требуется выполнить |
1. Планирование задач в течение определённого времени
Основа использования cron – выполнение задач в определённое время, как показано ниже. Это будет выполнять скрипт полного резервного копирования (full-backup) 10 июня в 8.30.
Пожалуйста, обратите внимание, что поле времени использует 24-часовой формат, Так что 8 АМ – 8, 8 РМ – 20 часов.
30 08 10 06 * /home/developer/full-backup
30
– 30-ая минута08
– 08 АМ10
– 10-й день*
– каждый день недели
2. Расписание задач для более частого выполнения (например, дважды в день)
Следующий скрипт использует дополнительное резервное копирование дважды в день каждый день. В этом примере выполняется дополнительное резервное копирование (incremental-backup) в 11:00 и в 16:00 каждый день. Значения через запятую в поле указывают, что команда должна быть выполнена в каждое указанное время.
00 11,16 * * * /home/developer/bin/incremental-backup
00
– 0-ая минута (начало часа) 11, 16
– 11 и 16 часов *
— каждый день *
— каждый месяц *
— каждый день недели
3. Расписание работы в течение определённого интервала времени (например, только в будние дни)
Если вы хотите, чтобы подпрограммы выполнялись в течение каждого часа с определённым интервалом времени, используйте следующее.
Подпрограмма Cron для каждого дня в течение рабочих часов
Этот пример каждый день проверяет состояние базы данных (включая выходные) в течение рабочих часов с 9 утра до 6 вечера.
00 09-18 * * * /home/developer/bin/check-db-status
00
— 0-ая минута (начало часа) 09-18
– 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часы) *
— каждый день *
— каждый месяц *
— каждый день недели
Подпрограмма Cron для каждого рабочего дня в течение рабочих часов
Этот пример проверяет состояние базы данных каждый рабочий день (кроме субботы и воскресенья) с 9 утра до 6 вечера.
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
00
— 0-ая минута (начало часа) 09-18
– 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (часы) *
— каждый день *
— каждый месяц 1-5 — Понедельник, Вторник, Среда, Четверг и Пятница (каждую неделю)
4. Как просмотреть записи Crontab?
Просмотр текущих Crontab-файлов пользователя.
Чтобы просмотреть ваши файлы crontab-l
из вышей учётной записи unix, проделайте следующее.
developer@dev-db$ crontab -l
@yearly /home/developer/annual-maintenance
*/10 * * * * /home/developer/check-disk-space
[Note: This displays crontab of the current logged in user]
Просмотр root записей crontab
Залогиньтесь в качестве root пользователя (su - root
) и выполните crontab-l
как показано ниже.
root@dev-db# crontab -l
no crontab for root
Практические рекомендации crontab: просмотрите другие записи crontab пользователя linux.
Чтобы посмотреть файлы других пользователей, залогиньтесь в качестве root пользователя и и используйте -u {имя пользователя} -l как показано ниже.
root@dev-db# crontab -u username -l
@monthly /home/username/monthly-backup
00 09-18 * * * /home/username/check-db-status
5. Как редактировать записи crontab?
Редактирование текущих пользовательских cron-записей.
Чтобы редактировать записи, используйте cronab -e
как показано ниже. По умолчанию, будут редактироваться текущие записи crontab пользователя.
developer@dev-db$ crontab -e
@yearly /home/developer/centos/bin/annual-maintenance
*/10 * * * * /home/developer/debian/bin/check-disk-space
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C
[Note: This will open the crontab file in Vim editor for editing.
Please note cron created a temporary /tmp/crontab.XX... ]
Когда вы сохраните файл, он сохранит crontab и покажет следующее сообщение, где будет сказано, что crontab успешно изменён.
~
"crontab.XXXXyjWkHw" 2L, 83C written
crontab: installing new crontab
Редактирование root записей crontab
Залогиньтесь как root
пользователь (su - root
) и сделайте crontab -e
, как показано ниже.
root@dev-db# crontab -e
Редактирование записей crontab-файла другого пользователя
Чтобы отредактировать запись crontab другого пользователя Linux, залогиньтесь в под root и используйте -u {имя пользователя} –е
, как показано ниже.
root@dev-db# crontab -u username -e
@monthly /home/username/fedora/bin/monthly-backup
00 09-18 * * * /home/username/ubuntu/bin/check-db-status
~
~
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. Выполнение Cron каждую минуту
В идеале, вам может и не потребоваться назначения выполнения cron каждую минуту. Но понимание этого примера поможет вам понять другие примеры, описанные в этой статье.
bash
* * * * * CMD
*
— означает возможную единицу – то есть, каждую минуту каждого часа в течение года. Кроме того, использование *
напрямую, окажется более полезной функцией в следующих примерах.
Указание */5
в поле минут означает каждые 5 минут. Указание 0-10/2
в поле минут означает каждые 2 минуты в первых 10 минутах. Таким образом, данная условность может быть использована во всех 4 полях.
7. Запуск фоновых задач Cron каждые 10 минут
Используйте следующее, если хотите проверять место на диске каждые 10 минут.
*/10 * * * * /home/ramesh/check-disk-space
Эта задача выполняет указанную команду проверки диска каждые 10 минут на протяжении года. Но вам может потребоваться выполнение проверки только в рабочие часы или наоборот. Приведённые выше примеры показывают, как это сделать.
Вместо указания значений в 5 полях мы можем указать их, используя ключевое слово, как показано ниже.
Существуют особые условия, когда вместо 5 полей вы можете использовать @
и далее ключевое слово – такие как перезагрузка, полночь, ежегодно, ежечасно.
Специальные ключевые слова Cron и их значение
Ключевое слово | Эквивалент |
---|---|
@yearly |
0 0 1 1 * |
@daily |
0 0 *** |
@hourly |
0 **** |
@reboot |
Запуск системы |
8. Расписание работы для первой минуты каждого года с использованием @yearly
Если вы хотите, чтобы cron задача выполнялись в первые минуты каждого года, то можете использовать ключевое слово @yearly
, как это показано ниже. В стаком случае система будет выполнять ежегодное техническое обслуживание, используя скрипт ежегодного тех.обслуживания в 00:00 1 января каждого года.
@yearly /home/developer/red-hat/bin/annual-maintenance
9. Запуск задач каждый месяц с использованием ключевого слова @monthly
Оно схоже со словом @yearly
, приведённым выше. Но команда выполняется ежемесячно. Команда будет выполнять резервное копирование в 00:00 первого числа каждого месяца.
@monthly /home/ramesh/suse/bin/tape-backup
10. Запуск задач каждый день с использованием @daily
Используя ключевое слово @daily
, будет ежедневно создаваться лог-файл очистки журнала в 00:00 каждый день.
@daily /home/developer/arch-linux/bin/cleanup-logs "day started"
11. Как выполнить команду Linux после каждой перезагрузки, используя @reboot?
Используя ключевое слово @reboot
, будет выполняться указанная команда каждый раз после загрузки системы.
@reboot CMD
13. 12. Как отключить/перенаправить исходящую почту Crontab, используя ключевое слово MAIL?
По умолчанию crontab отправляет выходные (output) задачи пользователю, который установил эту задачу. Если вы хотите перенаправить их другому пользователю, добавьте или обновите переменную MAIL в crontab, как показано ниже.
developer@dev-db$ crontab -l
MAIL="developer"
@yearly /home/developer/annual-maintenance
*/10 * * * * /home/developer/check-disk-space
[Note: Crontab of the current logged in user with MAIL variable]
Если вы хотите, чтобы почта вообще не отправлялась, т.е прекратить отправку выходных файлов crontab, добавьте или обновите переменную MAIL в crontab, как показано ниже.
MAIL=""
13. Как выполнять задачи Linux Cron кажду секунду, используя Crontab
Вы не можете настроить выполнение cron на каждую секунду. Потому что минимальная единица выполнения cron – минута. В обычном сценарии нет необходимости запускать выполнение cron каждую секунду.
14. Указание переменной PATH в Crontab
Во всех вышеприведённых примерах мы указывали абсолютный путь команды Linux или скрипта оболочки, которые должны быть выполнены.
Например, вместо указания /home/developer/tape-backup
, если вы хотите указать только tape-backup
, добавьте путь /home/developer
к переменной PATH в crontab
, как показано ниже.
developer@dev-db$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/developer
@yearly annual-maintenance
*/10 * * * * check-disk-space
[Note: Crontab of the current logged in user with PATH variable]
15. Установка Crontab из Cron-файла
Вместо прямого редактирования файла crontab вы можете добавить, все записи в cron-файл. Если в файле есть эти записи, вы можете выгрузить или установить их в cron, как показано ниже.
Примечание: Будет создан файл cron-file.txt в вашем crontab, который удалит прежние записи cron. Поэтому, пожалуйста, будьте внимательны при загрузке записей cron из
cron-file.txt
:
developer@dev-db$ crontab -l
no crontab for developer
$ cat cron-file.txt
@yearly /home/developer/annual-maintenance
*/10 * * * * /home/developer/check-disk-space
developer@dev-db$ crontab cron-file.txt
developer@dev-db$ crontab -l
@yearly /home/developer/annual-maintenance
*/10 * * * * /home/developer/check-disk-space