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

Введение в Cron

Так что же это за программа? Cron относится к категории демонов, которые могут выполнять запланированные команды. Он автоматически запускается при входе в многопользовательские уровни запуска, из /etc/init.d. Он ищет в области спула в / var / spool / cron / crontabs файлы crontab, названные в честь учетных записей в / etc / passwd. Чтобы получить доступ к crontabs в этом каталоге, вам нужно использовать команду crontab вместо прямого доступа к ним. Cron также может прочитать немного другой формат / etc / crontab, а также файлы в /etc/cron.d.

После настройки Cron просыпается каждую минуту, просматривает сохраненные crontabs linux и проверяет команду, чтобы увидеть, есть ли что-нибудь, что нужно выполнить. Если команда выполняется и вывод генерируется, то вывод отправляется по почте владельцу crontab или пользователю в переменной MAILTO в crontab. Дочерние копии cron, который выполняет эти процессы, названы в верхнем регистре, что вы увидите в выходных данных ps и syslog.

Cron также каждую минуту проверяет наличие изменений в modtime каталога спула. Если есть изменения, он проверяет время модификации всех Linux-crontabs и перезагружает те, которые были изменены. В результате cron не должен перезагружаться при изменении файла crontab.

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

Это влияет только на задания, которые выполняются в определенное время, а не на часовые задания или помеченные звездочкой в ​​спецификаторе минут / часов. Задания, заданные с помощью диких автомобилей, выполняются немедленно по новому времени. В случае смены часов более чем на три часа немедленно используется новое время.

В Red Hat и Debian cron рассматривает файлы cron.d как расширения файла linux crontab, поскольку они следуют специальному формату файла, что означает, что они включают поле пользователя. Эта функция предназначена для пакетов, которые требуют более точного управления расписанием, чем ежедневные, ежемесячные или еженедельные каталоги. Такие файлы в идеале должны быть названы в честь пакетов поставщиков. Файлы должны соответствовать соглашению об именах, используемом для частей выполнения, в том смысле, что они должны состоять исключительно из букв верхнего и нижнего регистра, цифр, дефисов и подчеркиваний. Файлы в каталоге cron.d отслеживаются на предмет изменений, так же как и каталог linux crontab. Для таких команд, как / bin / ls, обязательно используйте абсолютные пути для вызова правильной команды.

Введение в Linux Crontab

Теперь, когда вы знаете все входы и выходы cron, давайте внимательно рассмотрим linux crontab, программу для установки, удаления или вывода списка таблиц для управления самим демоном. Каждый пользователь может иметь собственный crontab linux, и файлы доступны в каталоге crontabs, но не предназначены для прямого редактирования.

Любая команда, указанная в пользовательском файле linux, будет выполняться как пользователь, владеющий ею. Вкладки, начальные пробелы и пустые строки обычно игнорируются. Строки, в которых в качестве первого непробельного символа указан хеш-знак, игнорируются, поскольку они рассматриваются как комментарии. Стоит отметить, что комментарии не допускаются в тех же строках команд cron, которые будут прочитаны как часть команды. На аналогичном замечании комментарии также не допускаются в строках с настройками переменных среды.

В linux crontab - активная строка с параметром команды cron или переменной среды, которая имеет вид «имя = значение», где при необходимости можно добавлять пробелы вокруг знака равенства. Любые последующие не ведущие пробелы являются частью значения имени. Строка значения может быть помещена в одинарные или двойные совпадающие кавычки для сохранения конечных или ведущих пробелов. Он не анализируется для замен среды, поэтому вы можете обнаружить, что строки типа «PATH = $ HOME / bin: $ PATH» не будут работать должным образом.

Многие параметры среды автоматически устанавливаются cron, например, HOME и LOGNAME устанавливаются из строки passwd пользователя, а SHELL - / bin / sh, а PATH - / usr / bin: / bin. Вы можете переопределить PATH, SHELL и HOME настройками crontab. Однако, LOGNAME не может быть изменено, поскольку это пользователь, от которого выполняется задание. В системах BSD эта переменная может называться USER, в этом случае также будет установлен USER.

Если отправка писем является частью команд, запускаемых в crontab linux, cron также рассмотрит MAILTO. Если переменная определена и не пуста, письмо отправляется указанному пользователю. Но если оно пустое, почта не отправляется и вместо этого отправляется письмо владельцу linux crontab. Если файл cron.allow доступен, то для использования этой команды вам необходимо указать его. Если этот файл не существует, но существует файл cron.deny, вы должны быть удалены из этого файла, чтобы использовать команду. Если ни один из файлов не существует, только суперпользователь сможет использовать команду в зависимости от параметров, зависящих от сайта. В качестве альтернативы, все пользователи смогут использовать команду, что имеет место в стандартных системах Debian.

Если опция -u доступна, она дает имя пользователя, чей linux crontab требует настройки. Если не указан, то crontab проверяет crontab пользователя, выполняющего команду. Важно использовать эту опцию всегда в целях безопасности при запуске внутри su, поскольку linux crontab может спутать с su. Параметр -l доступен для отображения текущего crontab на стандартном выводе, а параметр -r удаляет текущий crontab. Команда -e используется для редактирования текущего каталога Linux с использованием редакторов, указанных в переменных окружения EDITOR или VISUAL. Вы не можете использовать любой редактор, который отменяет связь и воссоздает файл; вам нужен редактор, который редактирует файл на месте. После выхода из редактора настроенный linux crontab будет установлен автоматически.

Модуль pam_env также поддерживается cron в системе Debian GNU / Linux, загружая среду, как указано в файле модуля. Однако следует отметить, что настройка PAM не переопределяет вышеупомянутые настройки или настройки файла crontab. Если вы хотите, чтобы PATH отличался от местоположения корзины, вам нужно настроить его в файле crontab. По умолчанию Cron будет отправлять письма, используя тип содержимого «text / plain» с параметром набора символов, установленным на набор кодов / символьную карту локали, в которой запущен cron, которая является системной локалью по умолчанию без набора переменных среды. или локаль, которую устанавливают переменные. Вы можете добавить свои собственные кодировки символов для вывода почты, установив переменные 'Content_Transfer_Encoding' и 'Content_Type' в crontabs, чтобы они соответствовали почтовым заголовкам имен.

Рекомендуемые курсы

  • Онлайн курс R Студия Anova Techniques
  • Сертификационный тренинг в AngularJS
  • Сертификационный курс ISTQB уровня 1
  • Сертификационный тренинг по основам тестирования программного обеспечения

Работаем на Crontab

Команда crontab, встречающаяся в Unix-подобных и операционных системах Unix, доступна через терминал. Чтобы увидеть, что в данный момент работает crontab, откройте терминал в вашей системе и выполните следующую команду:

$ sudo crontab -l

Для редактирования списков заданий crontab вы можете использовать следующую команду:

$ sudo crontab -e

Эта команда открывает редактор по умолчанию в вашей системе, который может быть pico или vio, чтобы изменить crontab. Чтобы сохранить задание crontab в файле crontab, сохраните и выйдите из редактора. Задания Crontab или cronjobs можно записать так:

* * * * * /bin/execute/this/script.sh

В приведенной выше команде есть пять звездочек, каждая из которых представляет разные части даты для планирования задания. Вот они:

  1. Минута, от нуля до 59
  2. Час, начиная с нуля до 23
  3. День месяца, от одного до 31
  4. Месяц, от одного до 12
  5. День недели, от нуля до шести, с нулем, означающим воскресенье

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

Теперь давайте предположим, что вы хотите просто выполнять сценарий каждый полдень в воскресенье, вот что вы делаете:

0 12 * * 0 /bin/execute/this/script.sh

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

0 12 * * 1-5 /bin/execute/this/script.sh

Cron выполняет команды, когда поля года, месяца, часа и минуты соответствуют текущему времени или когда по крайней мере день месяца и года соответствуют текущему времени. Поле может быть помечено звездочкой для обозначения «первый-последний». Допустимы диапазоны номеров, причем диапазоны представляют собой два числа, разделенных дефисом. Определенный диапазон является включающим, поэтому диапазон 8-11 для «часов» указывает выполнение в восьмой, девятый, десятый и одиннадцатый часы. Списки также поддерживаются, с каждым числом, разделенным запятыми, как '1, 2, 8, 9'. Вы можете смешивать и сочетать тоже, так что это может быть «1, 2, 8-11».

Вы можете использовать значения шага в сочетании с диапазонами, с символом «/» после диапазона, указывающим пропуск значения в диапазоне. Например, «0-11 / 2» в поле часов указывает выполнение команды через час, которое будет записано в виде списка, например: «0, 2, 4, 6, 8, 10». Шаги могут быть разрешены после звездочки, например '* / 2', чтобы указать команду, которая будет выполняться каждые два часа. Для полей дня и месяца вы можете использовать первые три буквы этого конкретного дня или месяца, и регистр не имеет значения. Однако списки и диапазоны имен не поддерживаются. День исполнения может быть указан в двух полях: день недели и день месяца. Если оба поля ограничены, команда будет запущена при совпадении любого из полей.

Остальная часть строки - это шестое поле, в котором указывается команда для запуска. Командная часть строки занимает до новой строки или до% символа. Это выполняется sh или указанной оболочкой в ​​переменной SHELL файла crontab. % В команде будет изменен на символы новой строки, если они не экранированы обратной косой чертой '\'. Все данные после первого знака% отправляются в качестве стандартного ввода в команду. Вы не можете разбить одну командную строку на несколько строк.

Планирование трюков на Crontab

К форматированию можно привыкнуть, но вот несколько приемов, которые могут вам помочь. Если вы хотите запускать cronjob каждые десять минут, вы можете написать его так:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Или вы можете написать это так, что проще:

* / 10 * * * * /bin/execute/this/script.sh

У вас также есть специальные слова, которые вы можете добавить в поле первой минуты вместо числа, например:

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

Выходное хранилище

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

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux способен создавать отчеты на разных уровнях. У вас есть стандартные ошибки STDERR и стандартный вывод STDOUT, помеченные как 2 и 1 соответственно. Следующая инструкция указывает хранить STDERR и STDOUT для создания единого потока данных сообщений и ошибок:

2> & 1

Итак, мы определили поток вывода, теперь мы должны дать ему пункт назначения. '>' Перезаписывает файл, а '>>' добавляет к нему. Для добавления, которое всегда безопаснее, вы можете использовать следующую команду:

>> /var/log/script_output.log

Вывод

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

Рекомендуемые статьи: -

Вот несколько статей, которые помогут вам получить более подробную информацию о Linux Crontab, так что просто перейдите по ссылке.

  1. Linux Interview Вопросы и ответы | Полезные и наиболее часто задаваемые
  2. Карьера в Linux
  3. Топ 10 полезных приложений для Linux для системных администраторов
  4. Linux против Windows 10