Что такое работа Cron и как ее использовать? — CloudSavvy ИТ

Часы и времяТатьяна Юрченко / Shutterstock

Утилита cron используется для запуска сценариев и команд через регулярные промежутки времени, в определенное время и в определенные даты. Он встроен в большинство дистрибутивов Linux и предоставляет очень полезный способ планирования задач на вашем сервере.

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

Как работает Cron?

Задания Cron определены в файле, который называется crontab. Этот файл уникален для каждого пользователя, и, хотя они обычно находятся в / var / spool / cron / crontabs, они не предназначены для непосредственного редактирования. Вместо этого вы редактируете их с помощью команды crontab:

crontab -e

Это откроет crontab вашего пользователя в текстовом редакторе CLI по умолчанию. Если из-за этого вы застряли в vim, вы можете изменить редактор по умолчанию, запустив select-editor в некоторых системах или добавив export VISUAL = micro; в ваш ~ / .bashrc (или эквивалент оболочки).

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

минута час день месяц будний день

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

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

15 * * * * команда

Это будет выполняться на 15-й минуте каждого часа, каждый день, каждый месяц, независимо от дня недели.

Если вы хотите запускать задание в 17:30 каждую пятницу, вы должны использовать:

30 17 * * 5 команда

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

0 9-17 * * 1-5 команда

С 9:00 до 17:00 с понедельника по пятницу. Точно так же вы можете определить список значений, разделив их запятыми.

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

0 * / 2 * * * команда

Учтите, что часы идут в полночь, 00:00. Тогда ваша работа будет выполняться один раз, затем в 2 часа ночи, затем в 4 часа ночи и так далее.

Некоторые версии cron поддерживают больший синтаксис, например @daily для запуска один раз в день или @reboot для запуска при каждой перезагрузке, хотя ваш дистрибутив может отличаться.

Если вам нужен простой способ отладки синтаксиса cron, существует множество онлайн-редакторов, таких как crontab.guru это покажет вам, что означает ваше расписание в терминах непрофессионала, т.е. «На 0-й минуте каждый 2-й час. «

Убедитесь, что Cron работает

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

* * * * * echo «test» >> файл журнала 2> & 1

Оператор >> добавляет вывод в файл, а оператор 2> & 1 обязательно включает stderr в вывод. Эквивалент bash будет просто & >> вместо >>, но это может работать не во всех дистрибутивах, поскольку cron по умолчанию использует / bin / sh.

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

MAILTO = «ваше имя@gmail.com»

Теперь любой вывод любого задания, который поступает на стандартный вывод (например, он куда-то не передается по конвейеру), будет отправлен по почте на указанный вами адрес. Вы можете проверить это, добавляя временное задание для вывода на стандартный вывод каждую минуту:

* * * * * echo «cron mail работает!»

Просто не забудьте выключить эту работу, когда она заработает, иначе она очень быстро начнет надоедать.

Cron по умолчанию использует / bin / sh, а не Bash

Возможно, вы используете оболочку, отличную от той, в которой cron запускает ваши задания. Bash (/ bin / bash) — это обычная оболочка для большинства дистрибутивов и реализация sh. Файл / bin / sh — это символическая ссылка на реализацию sh, но это не всегда bash. В системах на основе Debian, таких как Ubuntu, и в macOS / bin / sh по умолчанию ссылается на тире.

Конечным результатом этой путаницы является то, что ваши сценарии могут работать по-другому, и ваша переменная PATH (среди прочего) может быть неправильно настроена. Вы можете обойти это несколькими способами, и вариант cron в вашем дистрибутиве может работать по-другому, поэтому вам, возможно, придется попробовать пару:

  • Добавление SHELL = / bin / bash в начало вашего crontab. Возможно, вам также придется добавить BASH_ENV = «/ root / .bashrc», чтобы он мог читать ваш профиль bash.
  • Помещение / bin / bash перед командой в каждом задании. Вам может потребоваться установить переменную BASH_ENV, даже если вы не переключаетесь на bash глобально.
  • Использование bash shebang #! / Bin / bash в верхней части каждого скрипта. Это требует, чтобы у вас было каждое задание в отдельном файле сценария.

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

Обновление Crontab вручную

Если вы не хотите управлять своим crontab через crontab -e, вы можете использовать лучший метод. Команда crontab -l отобразит содержимое вашего crontab, и вы можете передать его в файл:

crontab -l> my_crontab

Затем загрузите этот файл в другую систему и «установите» с помощью:

crontab my_crontab

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *