Как использовать Cron в Linux Unix

{title}

{title}

Что такое хрон?


Cron - это название программы, которая позволяет пользователям Linux / Unix автоматически выполнять команды или сценарии (группы команд) в определенное время или дату. Обычно он используется для команд административных задач, таких как резервные копии, но может использоваться для выполнения чего угодно. Как определено на страницах руководства cron; Это демон, который запускает запланированные программы.
Практически во всех дистрибутивах Linux используется версия Vixie Cron, разработчиком которой является Пол Викси, один из величайших гуру Unix, а также создатель, среди других систем, BIND, который является одним из DNS-серверов. самый популярный в мире.

Начать cron


Cron - это демон (служба), что означает, что его нужно запускать только один раз, обычно с той же загрузкой системы. Служба cron называется crond. В большинстве дистрибутивов служба устанавливается автоматически и запускается при запуске системы, ее можно проверить несколькими способами:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) работает ... 
Если у вас установлена ​​сервисная команда:
 статус службы 
 crond (pid 507) работает ... 
Это также можно проверить с помощью команды ps:
 ps -ef | Grep Crond 
Если по какой-то причине cron не работает, мы можем запустить его с:
 /etc/rc.d/init.d/crond start Запуск crond: [OK] 
[color = rgb (0, 0, 0)] Если служба не настроена на запуск с самого начала, достаточно добавить ее с помощью команды chkconfig: [/ color]
 chkconfig - уровень 35 крон на 
При этом вы добавите его на уровень выполнения 3 и 5, чтобы он запускался во время запуска системы.

Использование cron


Есть как минимум два разных способа использования cron:
Первый находится в каталоге / etc, где вы, скорее всего, найдете следующие каталоги:
  • cron.hourly
  • cron.daily
  • cron.weekly
  • cron.monthly
Если файл сценария находится в любом из этих каталогов, сценарий будет запускаться каждый час, каждый день, неделю или месяц, в зависимости от каталога.
Для того чтобы скрипт был выполнен, он должен быть примерно таким:
 #! / bin / sh #script, который создает резервную копию документов cd / usr / tar czf * backup cp backup / other_directory / 
Мы должны исправить, что первая строка начинается с #!, Что указывает на то, что это сценарий оболочки bash, остальные строки - команды, которые мы хотим выполнить сценарий. Этот сценарий может быть назван, например, backup.sh, и мы также должны изменить соответствующие разрешения, чтобы он мог быть выполнен, например:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 июл 20 09:30 backup.sh 
«X» в группе разрешений владельца (-rwx) указывает, что это может быть выполнено.
Если мы оставим этот скрипт в cron.hourly, то он будет запускаться каждый час по одной минуте в день, я объясню почему позже.
Второй способ выполнения или использования cron - это непосредственное управление файлом / etc / crontab. При установке по умолчанию нескольких дистрибутивов Linux этот файл будет выглядеть примерно так:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 
Первые четыре строки являются переменными, которые указывают на следующее:
SHELL

Это «оболочка», под которой выполняется cron. Если не указано иное, то значение, указанное в строке / etc / passwd, соответствующее пользователю, который запускает cron, будет принято по умолчанию.
ПУТЬ

Он содержит или указывает путь к каталогам, в которых cron будет искать команду для выполнения. Этот путь отличается от глобального системного или пользовательского пути.
ПОЧТА К

Кому отправляется вывод команды (если она есть). Cron отправит электронное письмо тому, кто указан в этой переменной, то есть он должен быть действительным пользователем системы или какой-либо другой системы. Если он не указан, то cron отправит письмо пользователю, которому принадлежит исполняемая команда.
HOME

Это корневой или главный каталог команды cron, если не указано иное, корень будет тем, который указан в файле / etc / passwd, соответствующем пользователю, запустившему cron.
Комментарии обозначаются # в начале строки.
После вышесказанного идут строки, которые выполняют задачи, запланированные правильно. Нет ограничений на количество задач, по одной на строку. Поля (7), которые образуют эти линии, формируются следующим образом:

 Минутный час DayMonth Month DayOfThe Week Пользовательская команда 
  • Поле: Описание
  • Минута: он управляет минутой часа, в которую будет выполняться команда, это значение должно быть в диапазоне от 0 до 59.
  • Время: управляет временем выполнения команды, оно указывается в 24-часовом формате, значения должны быть в диапазоне от 0 до 23, 0 - полночь.
  • День месяца: день месяца, в который вы хотите выполнить команду. Например, будет указано 20, чтобы выполнить команду 20 числа месяца.
  • Месяц: месяц, в течение которого будет выполняться команда, его можно указать численно (1-12) или по названию месяца на английском языке только первые три буквы.
  • День недели: день недели, в которую будет выполняться команда, она может быть числовой (0-7) или по названию дня на английском языке, только первые три буквы. (0 и 7 = воскресенье)
  • Пользователь: пользователь, который выполняет команду.
  • Команда: Команда, сценарий или программа для выполнения. Это поле может содержать несколько слов и пробелов.
Звездочка * в качестве значения в первых пяти полях будет указывать начало-конец поля, то есть все. A * в поле минут будет указывать все минуты.
Чтобы понять это в первых 5 полях и звездочке, я лучше буду использовать несколько примеров:
пример:
 Описание 01 * * * * Выполняется в минуту 1 каждого часа каждого дня 158 * * * В 8:15 утра каждого дня 15 20 * * * В 20:15 каждого дня 00 5 * * 0 В 5 часов утра каждое воскресенье * 5 * * Вс Каждую минуту с 5:00 утра. в 5:59 утра каждое воскресенье 45 19 1 * * В 7:45 вечера первого числа каждого месяца 01 * 20 7 * В минуту 1 каждого часа 20 июля 10 1 * 12 1 В 1:10 утра каждый понедельник декабря 00 12 16 * Вэнь в полдень 16-го числа каждого месяца и в среду 30 9 20 7 4 В 9:30 утра 20 июля и в четверг 30 9 20 7 * В 9:30 утра 20 июля независимо от дня недели 20 * * * 6 В 20 минут каждого часа в субботу 20 * * 1 6 В 20 минут каждого часа в субботу в январе 
Также можно указывать списки в полях. Списки могут быть в форме 1, 2, 3, 4 или в форме 1-4, которые будут одинаковыми. Cron также поддерживает увеличение в списках, которые обозначаются следующим образом:
 Значение или список / приращение 
Опять же, списки и приращения легче понять на примерах:
пример:
 Описание 59 11 * 1-3 1, 2, 3, 4, 5 В 11:59 с понедельника по пятницу, с января по март 45 * 10-25 * 6-7 В минуту 45 всех световых часов С 10 до 25 каждого месяца, а суббота или воскресенье - 10.30.50 * * * 1, 3.5 На 10-й, 30-й и 50-й минуте всех часов понедельника, среды и пятницы * / 15 10-14 * * * Каждые пятнадцать минут с 10:00 утра. в 2 часа дня * 12 1-10 / 2 2.8 * Все протоколы 12 дня, в дни 1, 3, 5, 7 и 9 февраля и август. (Увеличение в третьем поле равно 2 и начинается с 1) 0 * / 5 1-10, 15, 20-23 * 3 Каждые 5 часов с 1 по 10, с 15 по 20 и с 20 по 23 числа каждого месяца, а среда - 3/3 2/4 2 2 2 Каждые 3 минуты, начиная с минуты 3 (3, 6, 9 и т. Д.) Из 2, 6, 10 часа и т. Д. (Каждые 4 часы, начинающиеся с часа 2) 2 февраля и вторника 
Как вы можете видеть в последнем примере, задача cron, которая была назначена этой строке с этими данными, будет выполнена только в том случае, если будут выполнены 5 полей (AND). То есть для выполнения задачи это должен быть вторник, 2 февраля в 02:03. Это всегда логическое И, которое верно только в том случае, если 5 полей имеют значение true в конкретную минуту.
[color = rgb (0, 0, 0)] Предыдущий случай проясняет, что: [/ color]
Программа cron вызывается каждую минуту и ​​выполняет задачи, которые ее поля выполняются в эту точную минуту.
Включая поле пользователя и команду, строки crontab могут быть следующими:
 0 22 * ​​* * root /usr/respaldodiario.sh 0 23 * * 5 root /usr/respaldosemanal.sh 0 8.20 * * * jcarrillo mail -s "система работает" 
Первые две строки выполняются пользователем root, а первая - каждый день в 22:00 сценарий, который генерирует ежедневную резервную копию. Второй запускается в 23:00 каждую пятницу сценарий, который генерирует резервную неделю. Третья строка выполняется пользователем Sergio и будет выполняться в 8 утра и 8 вечера каждый день, и команда должна отправить электронное письмо на с темой «система работает», способ Администратор знает, что удаленная система активна в указанное время, но в это время получает электронное письмо, что-то не так.
Будучи пользователем root, можно изменить crontab напрямую :
 vim / etc / crontab 
Это изменено напрямую.

Запуск Cron с несколькими пользователями, команда crontab


Linux - многопользовательская система, а cron - одно из приложений, которое поддерживает работу с несколькими пользователями одновременно. Каждый пользователь может иметь свой собственный файл crontab, фактически / etc / crontab предполагает, что это файл crontab корневого пользователя, хотя нет проблем с включением других пользователей, и, следовательно, шестое поле, которое точно указывает, кем является пользователь который выполняет задачу и является обязательным в:
 / etc / crontab 

Но когда обычные (и даже root) пользователи захотят сгенерировать свой собственный файл crontab, мы будем использовать команду crontab .
В каталоге / var / spool / cron (он может варьироваться в зависимости от дистрибутива) для каждого пользователя создается файл cron, хотя этот файл является текстовым, его не следует редактировать напрямую.
Затем возникают две ситуации, которые напрямую генерируют файл crontab с помощью команды:
 crontab -e 
Это откроет редактор по умолчанию (как правило, vi) с файлом с именем empty crontab, где пользователь войдет в свою таблицу задач и будет автоматически сохранен как / var / spool / cron / user.
В другом случае пользователь редактирует обычный текстовый файл с записями задач и в качестве примера с именем «my_cron», тогда команда $> crontab mi_cron будет отвечать за установку его в качестве файла cron вашего пользователя в / var / spool / cron / user:
 vi mi_cron # удаляет файлы из общей папки 0 20 * * * rm -f / home / sergio / shared / * # запускает скрипт, который создает резервную копию папки документов в первый день каждого месяца 0 22 1 * * / home / sergio / respaldomensual.sh # каждые 5 часов с понедельника по пятницу, убедитесь, что в моем доме указаны правильные разрешения 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq (сохраните файл)> ls mi_cron> crontab mi_cron (установить в / var / spool / cron / user) 
Подводя итог вышесказанному и рассматривая другие варианты crontab :
 crontab file.cron (установит file.cron в качестве пользовательского crontab) crontab -e (откроет редактор пресетов, в котором вы можете создать или отредактировать файл crontab) crontab -l (вывести текущий crontab пользователя, его задачи cron) crontab -r (удаляет текущий crontab пользователя) 
В некоторых дистрибутивах при редактировании crontabs обычных пользователей необходимо перезапустить сервис, чтобы файлы crontab можно было перечитать в / var / spool / cron.
 перезапуск службы crond 
Чтобы лучше понять, как запускать / останавливать / перезапускать службы, в этой статье вы найдете больше информации.

Контроль доступа к cron


Cron позволяет вам контролировать, какие пользователи могут или не могут использовать сервисы cron. Это достигается очень простым способом с помощью следующих файлов:
  • /etc/cron.allow
  • /etc/cron.deny
Чтобы запретить пользователю использовать cron или, вернее, команду crontab, просто добавьте свое имя пользователя в файл /etc/cron.deny, чтобы разрешить его использование, тогда было бы добавить ваше имя пользователя в /etc/cron.allow, если По какой-то причине вы хотите запретить использование cron всем пользователям, тогда вы можете написать слово ALL в начале cron.deny, и этого будет достаточно.
 echo ALL >> / etc / cron.deny или добавить другого пользователя в cron.allow echo juan >> / etc / cron.allow 
Если файл cron.allow или файл cron.deny не существует, то теоретически использование cron осуществляется без ограничений пользователя. Если имена пользователей добавляются в cron.allow без создания файла cron.deny, это будет иметь тот же эффект, что и создание его со словом ALL. Это означает, что как только cron.allow был создан с одним пользователем, в этом файле всегда должны быть указаны другие пользователи, которые хотят использовать cron.
выводы

Мы поговорили о его работе. Надеюсь, его поняли. В некоторых дистрибутивах, таких как Red Hat, есть такой вариант, как anacron, который может обеспечить некоторые недостатки cron, даже если на любом уровне, от самого базового до самого современного использования cron, рекомендуется понимать его работу., Если вы обнаружите какие-либо сомнения или у вас есть предложение, не стесняйтесь размещать его в комментариях.

  • 0