Таблица: Поля и допустимые диапазоны Crontab (синтаксис Linux Crontab)
Поле | Описание | Допустимое значение |
---|---|---|
MIN | Минуты | От 0 до 59 |
HOUR | Часы | От 0 до 23 |
DOM | День месяца | 1-31 |
MON | Месяц | 1-12 |
DOW | День недели | 0-6 |
CMD | Команда | Любая команда, которую требуется выполнить |
sudo crontab - e
Примеры:
0 6 * * * mysqldump -uLogin -pPassword databasename >/home/databasename-`date +\%Y-\%m-\%d-\%H.\%M`.sql
Создание дампа базы каждый день в 6 часов утра.
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 | Команда | Любая команда, которую требуется выполнить |
Основа использования 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-й день*
– каждый день неделиСледующий скрипт использует дополнительное резервное копирование дважды в день каждый день. В этом примере выполняется дополнительное резервное копирование (incremental-backup) в 11:00 и в 16:00 каждый день. Значения через запятую в поле указывают, что команда должна быть выполнена в каждое указанное время.
00 11,16 * * * /home/developer/bin/incremental-backup
00
– 0-ая минута (начало часа) 11, 16
– 11 и 16 часов *
- каждый день *
- каждый месяц *
- каждый день недели
Если вы хотите, чтобы подпрограммы выполнялись в течение каждого часа с определённым интервалом времени, используйте следующее.
Подпрограмма 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 - Понедельник, Вторник, Среда, Четверг и Пятница (каждую неделю)
Просмотр текущих 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
Редактирование текущих пользовательских 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
В идеале, вам может и не потребоваться назначения выполнения cron каждую минуту. Но понимание этого примера поможет вам понять другие примеры, описанные в этой статье.
bash
* * * * * CMD
*
- означает возможную единицу – то есть, каждую минуту каждого часа в течение года. Кроме того, использование *
напрямую, окажется более полезной функцией в следующих примерах.
Указание */5
в поле минут означает каждые 5 минут. Указание 0-10/2
в поле минут означает каждые 2 минуты в первых 10 минутах. Таким образом, данная условность может быть использована во всех 4 полях.
Используйте следующее, если хотите проверять место на диске каждые 10 минут.
*/10 * * * * /home/ramesh/check-disk-space
Эта задача выполняет указанную команду проверки диска каждые 10 минут на протяжении года. Но вам может потребоваться выполнение проверки только в рабочие часы или наоборот. Приведённые выше примеры показывают, как это сделать.
Вместо указания значений в 5 полях мы можем указать их, используя ключевое слово, как показано ниже.
Существуют особые условия, когда вместо 5 полей вы можете использовать @
и далее ключевое слово – такие как перезагрузка, полночь, ежегодно, ежечасно.
Специальные ключевые слова Cron и их значение
Ключевое слово | Эквивалент |
---|---|
@yearly |
0 0 1 1 * |
@daily |
0 0 *** |
@hourly |
0 **** |
@reboot |
Запуск системы |
Если вы хотите, чтобы cron задача выполнялись в первые минуты каждого года, то можете использовать ключевое слово @yearly
, как это показано ниже. В стаком случае система будет выполнять ежегодное техническое обслуживание, используя скрипт ежегодного тех.обслуживания в 00:00 1 января каждого года.
@yearly /home/developer/red-hat/bin/annual-maintenance
Оно схоже со словом @yearly
, приведённым выше. Но команда выполняется ежемесячно. Команда будет выполнять резервное копирование в 00:00 первого числа каждого месяца.
@monthly /home/ramesh/suse/bin/tape-backup
Используя ключевое слово @daily
, будет ежедневно создаваться лог-файл очистки журнала в 00:00 каждый день.
@daily /home/developer/arch-linux/bin/cleanup-logs "day started"
Используя ключевое слово @reboot
, будет выполняться указанная команда каждый раз после загрузки системы.
@reboot CMD
По умолчанию 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=""
Вы не можете настроить выполнение cron на каждую секунду. Потому что минимальная единица выполнения cron – минута. В обычном сценарии нет необходимости запускать выполнение cron каждую секунду.
Во всех вышеприведённых примерах мы указывали абсолютный путь команды 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]
Вместо прямого редактирования файла 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