В Linux мы можем настраивать выполнение регулярной задачи, также известной как cron задание, с помощью сервиса cron
(crond
).
Сервис cron
(crond
), читает crontab
(таблицы cron-а) и выполняет запланированные задания.
В данной статье я покажу формат crontab
и объясню как планировать запуск команд или скриптов в Linux.
Вы также найдете здесь такие распространенные примеры расписаний в crontab
, как запуск команды или скрипта каждую минуту, каждые 5 минут, каждый час, каждый день и многие другие.
Первым делом необходимо убедиться, что сервис cron
(crond
) запущен.
Узнать запущен ли сервис cron
в Ubuntu:
systemctl status cron.service
— или —
service cron status
Узнать запущен ли сервис crond
в CentOS:
systemctl status crond.service
— или —
service crond status
Также необходимо убедиться в том, что сервис cron
(crond
) будет запущен при старте системы.
Дельный Совет: Не знаете как добавит сервис в автозагрузку в Ubuntu или CentOS? Это легко! Читать далее →
Как только сервис cron
(crond
) запущен и стоит в автозагрузке — вы можете запланировать cron задание.
Настройка Crontab
Выполните следующую команду чтобы открыть crontab
текущего пользователя:
$ crontab -e
Открыть crontab
пользователя Alice:
$ crontab -u alice -e
Просмотреть содержимое crontab
текущего пользователя и пользователя Alice:
$ crontab -l $ crontab -u alice -l
Полезная Информация: По умолчанию, пользовательские задания для планировщика cron хранятся в директории /var/spool/cron/
.
Формат Планирования Заданий в Сrontab
Каждое запланированное задание описывается одной строкой и определяет время начала выполнения задания и само cron задание (команда или скрипт) которое будет выполнено.Чтобы задать время, можно использовать конкретное значение минуты, часа, дня месяца, месяца и дня недели.
Вместо конкретных значений можно использовать символ *
, который буде означать ВСЕ
значения или КАЖДОЕ
из значений.
Схема для лучшего понимания формата crontab
:
.---------------- минута (0 - 59) | .-------------- час (0 - 23) | | .------------ день месяца (1 - 31) | | | .---------- месяц (1 - 12) ИЛИ jan,feb,mar ... | | | | .-------- день недели (0 - 6) (Воскресенье=0 или 7) ИЛИ sun,mon,tue ... | | | | | * * * * * команда для выполнения
Временная метка может быть целым значением, несколькими значениями, диапазоном, дробью или дробным диапазоном.
Примеры временных меток для колонки час:
Значение | Тип | Описание |
---|---|---|
9 |
Целое значение | Выполнять в 9am |
6,7,10 |
Несколько значений | Выполнять в 6, 7 и 10am |
6-9 |
Диапазон | Выполнять каждый час между 6-9 AM (включительно) |
*/2 |
Дробь | Выполнять каждый 2-ой час, т.е. 0 (полночь), 2am, 4am, 6am, и т.д. |
3-12/3 |
Дробный диапазоном | Выполнять каждый 3-ий час между 3am и 12pm, т.е. 3am, 6am, 9am, 12pm |
Дельный Совет: Хотите стать DevOps инженером? Тогда вы обязаны знать Git! Это статья поможет реально быстро освоить основы Git! Читать далее →
Существует насколько предопределенных значений, которыми можно заменять время выполнения задания:
Значение | Описание | Эквивалент |
---|---|---|
@reboot |
Выполнять при загрузке операционной системы | — |
@yearly |
Выполнять ежегодно в полночь 1-го января | 0 0 1 1 * |
@annually |
Выполнять ежегодно в полночь 1-го января | 0 0 1 1 * |
@monthly |
Выполнять ежемесячно в полночь 1-го числа | 0 0 1 * * |
@weekly |
Выполнять в полночь каждый понедельник | 0 0 * * 0 |
@daily |
Выполнять ежедневно в полночь | 0 0 * * * |
@midnight |
Выполнять ежедневно в полночь | 0 0 * * * |
@hourly |
Выполнять в начале каждого часа | 0 * * * * |
Примеры Crontab
В конце этого поста я бы хотел представить несколько полезных примеров расписаний запуска cron заданий.Я просматриваю эти примера практически каждый раз, когда необходимо добавить в crontab
какую-то команду или скрипт.
Эта таблица мне очень помогает и надеюсь поможет вам.
Вот самые распространенные примеры расписаний cron заданий, которые могут быть найдены практически в любом crontab
в Linux:
Рассписание | Задание |
---|---|
* * * * * |
echo «Запуск cron задания каждую минуту» |
*/5 * * * * |
echo «Запуск cron задание каждые 5 минут» |
*/30 * * * * |
echo «Запуск cron задания каждые 30 минут» |
0 * * * * |
echo «Запуск cron задания каждый час» |
0 */3 * * * |
echo «Запуск cron задания каждые 3 часа» |
0 13 * * * |
echo «Запуск cron задания каждый день в 13:00» |
30 2 * * * |
echo «Запуск cron задания каждый день в 2:30» |
0 0 * * * |
echo «Выполнять задание каждый день в полночь» |
0 0 * * 0 |
echo «Запуск cron задания каждое Воскресенье» |
0 0 * * 1 |
echo «Запуск cron задания каждый Понедельник» |
0 0 1 * * |
echo «Запуск cron задания в первый день каждого месяца» |
0 0 1 1 * |
echo «Запуск cron задания каждый год первого Января» |