Crontab в Linux — с примерами и инструментами в реальном времени

Давайте рассмотрим crontab, его команды и различные операции, связанные с Crontab.

Мы узнаем, как планировать задачи с помощью утилиты cron, и, наконец, мы также обсудим некоторые из онлайн-инструментов, которые помогают нам форматировать и тестировать команды cron.

Оглавление

Источник

Crontab расшифровывается как «таблица cron». Слово cron произошло от греческого слова Chronos, означающего время. Crontab — это процесс системного демона, который автоматически выполняет некоторые задачи и задания в соответствии с запланированным временем.

  Как быстро найти и удалить большие файлы в Linux с помощью Large Files Finder

Сценарии использования

Crontab полезен для выполнения различных операций, таких как автоматическое резервное копирование, чередование файлов журналов, синхронизация файлов между удаленными машинами, очистка временных папок и т. д. Crontab можно использовать для любой работы, но он становится особенно полезным, когда мы начинаем иметь дело с тип работы системного администратора.

Используя cron, администратор может запланировать запуск задания на определенное время и день.

Итак, давайте посмотрим, как мы можем настроить это.

Синтаксис Кронтаба

Для выполнения списка команд утилита cron читает файлы конфигурации. Для интерпретации строк в таблицах конфигурации crontab используется синтаксис Crontab. Crontab имеет шесть полей, и первые пять (1-5) полей определяют дату и время выполнения. Последнее поле, то есть 6-е поле, может быть именем пользователя и/или выполняемой задачей /работой/командой/скриптом.

* * * * * USER_NAME COMMAND/SCRIPT-TO-EXECUTE

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ День недели (0–6) (0 — воскресенье или используйте имена)
│ │ │ |____________ Месяц (1 – 12),* означает каждый месяц
│ │ |______________ День месяца (1 – 31),* означает каждый день
│ |________________ Час (0 – 23),* означает каждый час
|___________________ Минута (0 – 59), * означает каждую минуту

Заметки:

  • Звездочка
  • используется для сопоставления всех возможных значений поля. Например, звездочка, используемая в поле часа, будет эквивалентна каждому часу, а звездочка в поле месяца будет эквивалентна каждому месяцу.

имя пользователя необязательно (доступно, только если это системный файл crontab)

Примеры:

Давайте разберем приведенный выше синтаксис на некоторых примерах.

0 5 * * * /scripts/job.sh

1. Запланируйте запуск cron на 5 утра ежедневно.

0 6,18 * * * /scripts/job.sh

2. Запланируйте выполнение cron два раза в день в 6 утра и 6 вечера.

* * * * * /scripts/job.sh

3. Запланируйте выполнение cron каждую минуту

0 19 * * mon /scripts/job.sh

4. Запланируйте запуск cron каждый понедельник в 19:00.

*/10 * * * * /scripts/job.sh

5. Запланируйте запуск cron каждые 15 минут.

* * * feb,jun,oct * /script/job.sh

6. Запланируйте выполнение cron на выбранные месяцы

25 7 4 3 * /home/script/backup.sh

7. Запустите сценарий оболочки /home/script/backup.sh 4 марта в 7:25.

8. Запланируйте выполнение cron каждые 30 секунд.

  • Поскольку у нас нет контроля над секундами в Crontab, мы можем добиться этого с помощью двухэтапного процесса, описанного ниже.
* * * * * /home/scripts/script.sh
  • Давайте сначала запланируем задачу, которая выполняется каждую минуту.
* * * * * sleep 30; /home/scripts/script.sh

Теперь воспользуемся командой sleep, чтобы приостановить выполнение на 30 секунд.

Вышеупомянутая задача остановит выполнение на 30 секунд и снова возобновится.

Тип конфигурационных файлов Cron

Существует два типа файлов конфигурации Cron:

  Как настроить Cozy Cloud Sync в Linux

Система UNIX/Linux Crontab

Для этого требуются привилегии root, поскольку обычно они используются для системных служб и критических заданий. Шестое поле (в приведенном выше описании синтаксиса) — это имя пользователя, от имени которого запускается команда. Это дает возможность системному crontab выполнять команды от имени любого пользователя.

Кронтаб пользователя

Пользователь также может установить свои собственные задания cron с помощью команды crontab. Здесь также шестое поле (в приведенном выше описании синтаксиса) — это команда для запуска, и все команды запускаются от имени пользователя, создавшего crontab. У каждого пользователя может быть свой собственный файл crontab, и хотя эти файлы находятся в каталоге /var/spool/cron/crontabs, они не предназначены для непосредственного редактирования. Нам нужно использовать команду crontab для редактирования или настройки наших собственных заданий cron.

Как это работает? Служба cron (демон) работает в фоновом режиме и постоянно (каждую минуту) проверяет файл /etc/crontab и каталоги /etc/cron.*/. Он также проверяет каталог /var/spool/cron/. Команды выполняются хрон

когда поля минут, часов и месяцев соответствуют текущему времени, и хотя бы одно из двухдневных полей (день месяца или день недели) соответствует текущему дню.

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

Список существующих заданий Cron

crontab -l

Мы можем вывести список всех заданий Cron, не открывая файл конфигурации crontab, используя команду ниже.

[[email protected] ~]# crontab -l
no crontab for toadmin.ru
[[email protected] ~]#

Если существующего задания нет, он вернет вывод как

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

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

Таблица Cron зависит от пользователя, что означает, что вы должны войти в систему под определенным пользователем, чтобы увидеть список таблиц cron.

Список Cron для конкретного пользователя

Чтобы вывести список запланированных заданий другого пользователя, используйте параметр -u (пользователь) и -l (список).

crontab -u другое_имя_пользователя -l

  Как играть в Super Flight в Linux

Пример: crontab -u toadmin.ru -l

Добавить/изменить записи Crontab

Чтобы отредактировать запись crontab, мы можем использовать опцию -e, как показано ниже.

кронтаб -е

Приведенная выше команда откроет редакторы vi, в которых вы укажете детали задания и сохраните файл. После сохранения вы можете проверить, настроен ли cron с помощью crontab -l.

Добавить/изменить записи Crontab для конкретного пользователя

crontab -u another_username -e

Мы можем отредактировать crontab для другого пользователя, используя команду ниже

Пример: crontab -u toadmin.ru -e

Удалить запись Crontab

Используйте параметр -r с Crontab, чтобы удалить завершенные запланированные задания без подтверждения из crontab.

кронтаб -р

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete toadmin.ru's crontab?

Если вы хотите получить подтверждение перед удалением запланированных заданий, используйте параметр -i с параметром -r, который запросит подтверждение у пользователя перед удалением пользовательского crontab.

Специальная строка Crontab

Помимо описанного выше синтаксиса, мы также можем использовать восемь специальных строк, предоставляемых Crontab. Это не только сэкономит наше время, но и улучшит читаемость.
Специальная строка
Описание
@перезагрузка
Запустить один раз, после запуска.
@ежегодно
Выполнять один раз в год, т. е. 0 0 1 1 *
@ежегодно
То же, что @yearly
@ежемесячно
Запускать раз в месяц, т.е. 0 0 1 * *
@еженедельно
Запускать раз в неделю, т.е. 0 0 * * 0
@повседневная
Запускать один раз в день, т.е. 0 0 * * *
@полночь
То же, что @daily
@по часам

Запускать раз в час, т.е. 0 * * * *

Примеры специальных строк Crontab

1. Crontab для ежегодного планирования задач

@yearly /скрипты/greeting.sh

Мы можем выполнить выше один для отправки новогоднего приветствия, он будет выполняться в первую минуту каждого года.

2. Crontab для планирования ежемесячных задач.

@ежемесячно /scripts/cleanup.sh

Мы можем выполнить описанное выше, чтобы выполнить некоторые действия по очистке в начале каждого месяца.

Точно так же мы можем использовать другую специальную строку Crontab для еженедельных, ежедневных и ежечасных целей.

Справочник Крон

  • Системный администратор может использовать общесистемное расписание cron, которое находится в предопределенном каталоге cron, как показано ниже.
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.ежемесячно

/etc/cron.еженедельно

Примеры Crontab в реальном времени

Давайте обсудим некоторые примеры реального времени, которые обычно используют системные администраторы или ИТ-специалисты.

Удалить пустые файлы и каталог

45 0 * * * toadmin.ru find /tmp -type f -empty -delete

Приведенное выше выражение cron найдет пустые файлы и каталог из каталога /tmp и удалит их. Это задание будет выполняться ежедневно в 00:45. Нам нужно указать имя пользователя для выполнения этой работы. В приведенном выше примере пользователь toadmin.ru выполняет задание cron.

Выполнение нескольких задач с помощью одного cron

* * * * * /home/scripts/backup.sh; /home/скрипты/scritp.sh

Несколько задач/работ могут быть разделены точкой с запятой (;) и могут быть назначены одному выражению cron.

Инструменты форматирования и тестирования Cron

До сих пор мы обсуждали команды и синтаксис crontab для планирования задачи. Но что, если вы не системный администратор и ваша работа не заключается в регулярной настройке Cron, может быть невозможно запомнить синтаксис, и это открывает простор для ошибок. Не волнуйтесь, у нас есть решение этой проблемы.

В Интернете доступно несколько инструментов форматирования Cron.

# 1. Генератор заданий Cron Генератор заданий Cron

— это очень удобный графический интерфейс, в котором вы можете указать минуты, дни и путь скрипта для создания crontab.

Давайте возьмем пример в реальном времени, где я должен выполнять /home/processMonitor.sh каждые 5 минут с понедельника по пятницу.

Итак, я получил приведенный ниже синтаксис Cron, который я могу поместить в свой crontab, выполнив
кронтаб –е

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Изикрон Изикрон

— это полезный веб-планировщик заданий cron. Мы можем создать задание cron, указав URL-адрес для вызова, мы можем установить время, когда оно должно быть выполнено. Мы также можем указать выражение cron или добавить его вручную из описательной формы. Важно отметить, что мы можем дополнительно использовать базовую HTTP-аутентификацию для небольшого уровня безопасности.

Не только это, Easycron также можно использовать для достижения других целей, таких как стандартное выражение Cron, журналы выполнения заданий Cron, уведомление по электронной почте, отдельные журналы сбоев и т. д.

# 3. Генератор Кронтаб Кронтаб Генератор

— еще один удобный инструмент для создания crontab, и с помощью этого инструмента вы также можете добавить, хотите ли вы сохранить вывод cron в файл или отправить его по электронной почте.

# 4. Кронтаб Гуру Кронтаб Гуру

это простой онлайн-редактор выражений расписания cron. Кроме того, он предоставляет полезные средства мониторинга вашего cronjob. Все, что нам нужно сделать, это скопировать предоставленную команду и добавить ее в конец определения crontab. Если задание cron завершится неудачно или даже не запустится, вы получите оповещение по электронной почте.

В приведенном ниже примере задание будет выполняться в 04:05 каждый день, каждый месяц и каждую неделю.

# 5. CRON-тестер CRON-тестер

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

Для этого мы можем использовать этот инструмент. Все, что нам нужно сделать, это скопировать и вставить наше выражение cron в поле определения cron, затем выбрать количество итераций и нажать «Тест», чтобы увидеть различные даты, когда он будет выполняться.

Давайте проверим одно из наших выражений cron 4 3 */2 * *, которое должно запускаться в 03:04 (AM) каждые два дня. Давайте проверим это с помощью cron-тестера.

Вывод Я надеюсь, что вышеизложенное поможет вам лучше понять Crontab и настроить задания cron. Планирование заданий через Cron — одна из многих задач, выполняемых администратором Linux. Если вы заинтересованы в изучении продвинутых навыков, ознакомьтесь с этимкурс

.