Перейти к основному содержанию

Cron — планировщик заданий в Linux

Crontab

Системным администраторам и разработчикам часто приходится сталкиваться с периодическим выполнением скриптов и заданий. В Linux автоматическим выполнением задач по расписанию занимается cron.

Cron — это планировщик, который позволяет автоматически выполнять задачи по заданному расписанию от имени разных пользователей. Такие задачи называются Cron Jobs.

Каждая задача (скрипт) описывается одной строкой в файле crontab. Сначала указывается расписание, потом ссылка на скрипт. Шаблон задания выглядит так:

* * * * * /path/to/job.sh

Что можно понимать как:

[минуты] [часы] [день месяца] [месяц] [день недели] [абсолютный путь к файлу]

Более наглядно (можно скопировать):

# * * * * * /path/to/job.sh
# | | | | |
# | | | | +——— день недели (0-6), 0 — воскресенье
# | | | +————— месяц (1-12)
# | | +——————— день месяца (1-31)
# | +————————— часы (0-23)
# +——————————— минуты (0-59)
  • * — звёздочка обозначает все значения
  • , — разделитель значений
  • - — диапазон значений
  • / — чередование значений

Пять звёздочек — запуск скрипта каждую минуту каждого часа в каждый день месяца во все месяцы и дни недели. Т.е. раз в минуту. Допустимо указывать отдельные числа, диапазоны и несколько диапазонов через запятую. Можно чередовать значения. Например:

30 13 7-8 feb-apr,nov-dec * /path/to/job.sh

Скрипт будет выполняться:

  • 7 февраля в 13:30
  • 8 февраля в 13:30
  • 7 марта в 13:30
  • 8 марта в 13:30
  • 7 апреля в 13:30
  • 8 апреля в 13:30
  • 7 ноября в 13:30
  • 8 ноября в 13:30
  • 7 декабря в 13:30

Полезные команды

Помощь:

man crontab

Список задач текущего пользователя:

crontab -l

Список задач выбранного пользователя:

crontab -u пользователь -l

Резервное копирование списка задач текущего пользователя в текстовый файл:

crontab -l > backup.txt

Восстановление задач из бэкапа в список задач текущего пользователя:

crontab backup.txt

Удаление задач текущего пользователя:

crontab -r

Редактирование задач текущего пользователя:

crontab -e

Если эта команда выполняется в первый раз, вам предложат выбрать редактор:

no crontab for sk - using an empty one

Select an editor. To change later, run 'select-editor'.
 1. /bin/nano <---- простейший
 2. /usr/bin/vim.basic
 3. /usr/bin/vim.tiny
 4. /bin/ed

Изначально crontab-файл пустой:

linux

Файлы crontab после их создания находятся здесь:

/var/spool/cron/crontabs

Примеры задач

Выполнять скрипт каждую минуту:

* * * * * /path/to/job.sh

Выполнять скрипт раз в пятнадцать минут:

*/15 * * * * /path/to/job.sh

Выполнять скрипт каждый час в сорок минут:

40 * * * * /path/to/job.sh

Выполнять скрипт в семь утра:

0 7 * * * /path/to/job.sh

Выполнять скрипт в семь утра и семь вечера:

0 7,19 * * * /path/to/job.sh

Выполнять скрипт каждые два часа:

0 */2 * * * /path/to/job.sh

Выполнять скрипт в семь утра по понедельникам:

0 7 * * mon /path/to/job.sh

Выполнять скрипт в семь утра по будням:

0 7 * * 1-5 /path/to/job.sh

Cуществуют готовые задания:

  • @reboot — одиночное выполнение команды при загрузке
  • @yearly — раз в год (аналог 0 0 1 1 *)
  • @annually — тоже раз в год
  • @monthly — раз в месяц (аналог 0 0 1 * *)
  • @weekly — один раз в неделю (аналог 0 0 * * mon)
  • @daily — раз в день (аналог 0 0 * * *)
  • @midnight — тоже раз в день
  • @hourly — раз в час (аналог 0 * * * *)

Crontab генератор

Если вам лень во всём этом разбираться, то воспользуйтесь онлайн генератором:

https://crontab.guru

linux

Примечание:

cron не работает, если в конце crontab нет перевода строки.

Теги

 

Похожие материалы

Linux — после удаление файла не освободилось место

Случается так, что место на Linux сервере заканчивается. Админу нужно срочно удалить что-нибудь большое и ненужное. Админ находит кандидата на удаление, удаляет его, и... место не освобождается.

Теги

Уязвимость в ядре Linux — Dirty Pipe CVE-2022-0847

В ядре Linux найдена серьёзная уязвимость CVE-2022-0847, названная Dirty Pipe. Уязвимость позволяет перезаписать содержимое любого файла от имени непривилегированного пользователя.

Теги