Администрирование
...
Фоновые задачи
Настройка Cron для Linux

Основные сведения о Cron

10min

Основные команды Cron

Если вы хотите изменить Crontab-файл (файл содержащий инструкции по выполнению запланированных заданий), введите в терминале следующую команду:

Shell


Результат будет выглядеть следующим образом:

Document image


Скорее всего откроется редактор vi. Так как этот редактор довольно часто используется при работе с Cron, мы рекомендуем ознакомиться с основными командами vi.

Если вы хотите изменить crontab-файл другого пользователя, используйте команду crontab -u username -e. Чужие файлы могут редактировать только суперпользователи, поэтому потребуется ввести sudo su перед командой.

Document image


Если вы хотите удалить актуальный файл crontab текущего пользователя, введите следующую команду:

Shell


Команда ниже делает аналогична команде -r, однако она просит подтвердить действие перед удалением файла crontab:

Shell


Если вы хотите отобразить содержимое открытого файла crontab, введите в терминале следующую команду:

Shell


Эта команда также может показать, есть ли у вас crontab-файлы. Если созданные файлы отсутствуют, будет показано следующее сообщение:

Document image


Для просмотра crontab-файлов других пользователей, введите следующую команду как суперпользователь:

Shell

Document image


Синтаксис Cron

Crontab-файл состоит из двух частей: расписания и команды. Команда выглядит следующим образом:

Shell


Например,

  • * * * * /bin/sh backup.sh запускает резервное копирование каждую минуту.
  • 30 18 * * * rm /home/sydtesting/tmp/* означает, что файлы tmp будут удаляться из /home/sydtesting/tmp каждый день в 18:30.

Файл Crontab имеет пять полей. Каждое поле представлено звёздочкой и определяет дату и время задачи, которая должна выполняться регулярно.

Document image

  • Минуты — минута часа, в которую будет запущена команда (от 0 до 59).
  • Часы — час, когда начнётся выполнение команды (от 0 до 23).
  • День месяца — в какой день месяца должна запускаться команда (от 1 до 31).
  • Месяц — в какой месяц будет выполняться команда (от 1 до 12).
  • День недели — в какой день недели должна выполняться команда (от 0 до 6, 0 — воскресенье).

Определенные символы также имеют значение. Используйте:

  • Звёздочку (*) чтобы определить параметры планирования.
  • Запятую (,) чтобы указать два или более вариантов времени выполнения команды.
  • Дефис (-) чтобы задать диапазон времени выполнения команды.
  • Косую черту (/) для создания заданных интервалов времени в определённом диапазоне.
  • Last (L) чтобы определить последний день недели в данном месяце. Например, 3L означает последнюю среду.
  • Рабочий день (W) чтобы определить ближайший рабочий день недели к заданному времени. Например, 1W означает, что скрипт будет запущен в ближайший рабочий день к первому числу, если 1-ое — Воскресенье, команда будет выполняться в понедельник (2-го).
  • Решетку (#) чтобы указать день недели в поле месяца (от 1 до 5). Например, 1#2 означает второй понедельник.
  • Вопросительный знак (?) чтобы выбрать определённый день для запуска скрипта. Для правильной работы нужно указать либо число месяца, либо номер дня — мы не можем указывать оба значения одновременно. Этот символ даёт возможность оставить одно значение пустым.

Примеры

Обратите внимание, что вывод команды автоматически отправляется на локальную электронную почту. Если вы не хотите получать эти письма, добавьте к синтаксису >/dev/null 2>&1, как показано в примере:

Shell


Если вы хотите, чтобы вывод приходил на другую почту, вы можете добавить MAILTO, а затем адрес электронной почты. Например:

Shell


Больше примеров синтаксиса:

Выражение

Значение

0 0 * * * /bin/sh backup.sh

Выполнять резервное копирование базы данных в полночь один раз в день.

0 6,18 * * * /bin/sh backup.sh

Выполнять резервное копирование БД два раза в день в 6 утра и 6 вечера.

0 */6 * * * /scripts/monitor.sh

Проводить мониторинг каждые шесть часов.

*/10 * * * * /home/user/script.sh

Выполнять cron job для файла сценария, находящегося в домашнем каталоге каждые 10 минут.

0 * 20 7 * /bin/sh backup.sh

Запускать резервное копирование базы данных каждый час каждого 20 июля.

0 0 * * 2 * /bin/sh

Запускать резервное копирование БД в полночь каждый вторник.

* * * 1,2,5 *  /script/script.sh

Выполнить команду в январе, феврале и мае.

10-59/5 5 * * * /home/user/script.sh

Выполнять команду каждые 5 минут в 5 часов утра, начиная с 5:10 утра.

0 8 1 */3 * /home/user/script.sh

Запускать команду ежеквартально в 1-й день в 8 утра.

* * * * * /scripts/script.sh; /scripts/scrit2.sh

Чтобы запланировать несколько заданий в одном cron job.

@reboot /scripts/script.sh

Чтобы выполнять определённую задачу каждый раз при запуске системы.

0 0 1 * *  /home/user/script.sh

Выполнить команду в первый день каждого месяца.