Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

Как работает и как правильно использовать Cron, crontab

          Написано: Giansante Gabriele, 24/12/2001      Обновлено: 04/02/2017      Перевод Марины Пыльник

Иногда возникает необходимость выполнить команду, скрипт или программу через одинаковые промежутки времени: месяц, час, день, неделю и т.д. Этот механизм, всегда присутствующий в Linux, представлен демоном cron.
Речь идёт о программе, которая работает в фоновом режиме (сама по себе) и выполняет определённые задачи по заданному расписанию. Обычно не требует отдельной установки, т.к. уже включена в оперативную систему (имеем в виду версию Linux RedHat).

Посмотрим как она работает.
Cron активизируется каждую минуту и читает определённые конфигурационные файлы, где указаны определённые задачи к выполнению, и расписание, по которому они должны быть выполнены. Если он находит что-то к выполнению в ту минуту, в которую он активизирован, то происходит выполнение операции. Всё то, что выводится на стандартном выводе, посылается на электронную почту владельца демона, и обычно это пользователь "root".
Нет необходимости перезапускать cron при каждом внесении изменений.

Существуют три разных способа указывать операции и интервалы.

Первый способ

Самый простой путь - это создать скрипт (sh, bash, perl или другой), который выполняет то, что мы хотим. Этот скрипт должен быть внесён в одну из следующих папок
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
для того, чтобы он мог быть выполнен через строго определённые промежутки времени (соответственно день,час, месяц и неделя). Можно также держать все скрипты в одной стандартной папке (например "/scripts") и потом создать символический линк ("man ln", "ln -s") в одной из вышеупомянутых.
Обычно сron - дневной, недельный и месячный выполняется в 04:00 (ночью!).

Второй способ

Для тех временных интервалов, которые отличаются от стандартных, можно использовать папку
/etc/cron.d
или файл
/etc/crontab
В cron.d могут быть внесены файлы особого формата (такого же как crontab), описывающие операции и короткие временные промежутки даже длительностью всего лишь одну минуту.

Формат: могут быть внесены в каждый файл
  • комментарии
  • пустые строки
  • установка переменных окружения
  • команды cron (не допускаются комментарии на той же строке, где и команда cron)
Идём по порядку. Комментарии - это линии, которые начинаются с символа "#" и игнорируются так же как и пустые строки.

Что касается переменных окружения, вот некоторые для использования
  • SHELL, а именно shell для использования выполнения команды
  • PATH, а именно path, тот файловый каталог, где искать указанные команды
  • MAILTO, а именно кому послать на электронную почту полученный результат выполнения команд. Почта посылается, даже если эта переменная не будет установлена.
Способ предотвратить отправку почты или же не допустить запись результата операции в самом тексте сообщения, которое будет послано, это сделать переадресацию вывода результата выполнения команд на устройство "/dev/null" (например, "/test/test.sh>/dev/null").

Команды cron представляют собой наиболее сложную часть конфигурации.
Формат команды cron следующий:
s1 s2 s3 s4 s5 Собственник Команда
Команда является собственно командой к выполнению (с соответствующими параметрами и возможными переадресациями вывода результата).
Собственник указывает кому принадлежит команда cron (например, root или другие пользователи).

s1, s2, s3, s4, s5 это именно те поля, которые определяют интервал выполнения команды/скрипта/программы. В каждой из этих полей может быть знак "*" для указания любого возможного значения.

"s1" обозначает минуты. Разрешённые значения от 0 до 59. Можно указывать и интервалы (объясним вкратце чуть позже).
"s2" обозначает часы. Разрешённые значения от 0 до 23. Можно указывать и интервалы (объясним вкратце чуть позже).
"s3" обозначает дни месяца. Разрешённые значения от 1 до 31. Можно указывать и интервалы (объясним вкратце чуть позже).
"s4" обозначает месяцы. Разрешённые значения от 1 до 12 (плюс названия буквами). Можно указывать и интервалы (объясним вкратце чуть позже).
"s5" обозначает дни недели. Разрешённые значения от 0 до 7 (плюс названия буквами, 0 и 7 обозначают Воскресенье). Можно указывать и интервалы (объясним вкратце чуть позже).

Все эти пять полей могут обозначать либо "число", либо "любое значение", либо "интервал".
Указывая число, мы указываем определённый момент времени. Например, поместив 2 в s4, мы указываем, что выполнение команды будет в феврале (принимаются во внимание также и остальные 4 поля).
Если какое-то поле нас не интересует, т.е. если оно не является важным для определения времени активизации скрипта, может быть использован знак ("*") для указания всех возможных значений.
Очень часто, однако, то что нам нужно - это некоторый интервал, а не какой-то определённый момент времени. Например, мы хотим выполнять команду каждые 2 минуты, а не каждую вторую минуту. В этом случае можем написать пять полей (или только некоторые из них) в виде интервала. Давайте посмотрим на некоторые форматы (не все поддерживаются всеми системами):
  • */n указывает "каждое "n". Например, "*/2" указывает каждые 2.
  • n1-n2 указывает от n1 до n2. Например, "5-8" указывает 5,6,7,8.
  • n1-n2/n3 указывает каждые n3 в промежутке n1-n2. Например, 3-21/6 указывает 3,9,15,21 (каждые 6 в промежутке 3-21).
  • n1,n2,... указывает определённые числа. Например, 4,7,8 указывает все написанные числа.
  • n1-n2,n3-n4 указывает от n1 до n2 и от n3 до n4. Например, 3-5,7-9 указывает 3,4,5,7,8,9.
Возможны также и другие комбинации, которые вы можете легко составить, основываясь на вышенаписанных форматах.
Некоторые примеры (не обращать внимание на внесённые команды):
   # Выполняет указанную команду каждые пять минут только 15 числа каждого месяца
   # пользователь "root"
   */5 * 15 * * root /bin/ls /var/log>/temp/ls.out

   # Посылает сообщение на почту с указанным текстом каждый день в 8:00 утра, 
   # пользователь "root". Если MAILTO равно "root", тогда почта приходит пользователю root.
   0 8 * * * root echo "Добрый день!!!"

   #Выполняется каждую минуту!!! Пользователь - "pippo".
   * * * * * pippo /usr/bin/gimp

Реклама
Третий способ

Пользователь,не являющийся root, для использования собственных команд cron , может внести их в
/var/spool/cron
В этот файл при этом не должны вноситься изменения напрямую (что обычно и не может быть выполнено со стороны пользователя, не являющимся root), потому что он управляется командой /usr/bin/crontab.

Смысл в том, чтобы иметь определённый файл master, содержащий cron каждого пользователя.
Синтаксис этого файла такой же,как и "/etc/cronttab". Файл master может располагаться в любом месте файловой системы.
В процессе установки, crontab копирует содержимое этого файла (master) внутрь файла "/var/spool/cron/имяПользователя".
Всегда при помощи crontab ("man crontab") можно удалить установленные cron.
Правила,по которым пользователь может работать с crontab, определены файлами
/etc/cron.allow
/etc/cron.deny
Чтобы проиллюстрировать как использовать функции этого третьего способа, представим себе, что у нас есть пользователь "pippo" и его пользовательская файловая папка "/home/pippo".
Создаем файл "/home/pippo/test.cron" co следующим содержимым:
   # /home/pippo/test.cron
   # Тест по использованию crontab
   
   MAILTO=pippo@localhost
   * * * * * pippo echo "привет, pippo"
Этот cron настраивает почту с целью посылки сообщений "привет, pippo" пользователю pippo каждую минуту.
Для установки содержимого указанного файла, выполнить
/usr/bin/crontab -u pippo /home/pippo/test.cron
если вы подключились как пользователь root, или
/usr/bin/crontab /home/pippo/test.cron
если работаете как "pippo".

Вы увидите, что возникнет файл "/var/spool/cron/pippo" (если раньше его не было) co следующим или подобным содержимым:
   # DO NOT EDIT THIS FILE - edit the master and reinstall.
   # (/home/pippo/test.cron installed on Mon Dec 24 15:27:23 2001)
   # (Cron version -- $Id: cron.ru.jsp,v 1.1 2017/02/10 01:38:41 gabriele Exp $)
   MAILTO=pippo@localhost
   * * * * * pippo echo "привет, pippo"
Естественно здесь есть и предостережение о том, что любые изменения должны быть произведены в файле master, а не в файле "/test/test.cron".
ВНИМАНИE! Установка cron определённым пользователем, перепишет уже существующие cron этого же пользователя.
Чтобы добавить команды cron без удаления уже существующих и без внесения их предварительно в master, использовать
/usr/bin/crontab -u pippo -e
если работаете как пользователь root, или
/usr/bin/crontab -e
если работаете как "pippo".

Откроется редактор "vi" c текстом уже существующих команд и появится возможность внести новые, а также модифицировать или удалять уже существующие.
Это не касается файла master, а работает только с "/var/spool/cron/pippo", избегая процедуры повторной инсталляции.
Однако обычно с целью избежания внесенных с "-e" изменений редактируется и повторно устанавливается именно файл master.

Чтобы удалить внесенные кроны, использовать
/usr/bin/crontab -u pippo -r
если вы работает как пользователь root, или
/usr/bin/crontab -r
если работаете как "pippo".


Для других деталей, читайте руководство: Manpage of CRON (8) , Manpage of CRONTAB (1) , Manpage of CRONTAB (5) .

Если Вы нашли эту статью полезной для себя
поделитесь ею с друзьями в социальных сетях или поставьте "Мне нравится" (вверху справа) .
Большое спасибо!


Вы должны разрешить сохранение куки-файлов и согласиться на правила о конфиденциальности для использования "поделиться" и "мне нравится".
Вы всегда можете отказаться от сохранения куки-файлов и можете удалить куки "cookieconsent_status" из вашего браузера.

 

Tools (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Поиск в @myjsp.feelinglinux.com

Реклама