Cron - інформаційний конспект

Якщо чорт не запущений запустити його можна як і будь-який інший демон командою /etc/init.d/cron start. виконаної від імені адміністратора.

Демон cron працює в похвилинному режимі. Тобто поставити час виконання того чи іншого завдання можна з точністю до однієї хвилини. Основний конфігураційний файл демона cron - це / etc / crontab. Основна частина файлу це таблиця в 7 стовпців, кожен рядок, якій описує одне завдання. Файли які описують завдання для демона cron. також часто називають crontab-файл.

Приклад файлу / etc / crontab:

# M h dom mon dow user command
17 * * * * root cd / run-parts -report /etc/cron.hourly
25 6 * * * root test -x / usr / sbin / anacron || (Cd / run-parts -report /etc/cron.daily)
47 6 * * 7 root test -x / usr / sbin / anacron || (Cd / run-parts -report /etc/cron.weekly)
52 6 1 * * root test -x / usr / sbin / anacron || (Cd / run-parts -report /etc/cron.monthly)

Кожному рядку задаються значення 7-ми полів:

m - minute - хвилина - на якій хвилині виконувати завдання; діапазон значень - (0-59)
h - hour - година - о котрій годині виконувати завдання; діапазон значень (0-23)
dom - day of month - день місяця - в які дні місяця виконувати завдання; діапазон значень (1-31)
mon - month - місяць - в які місяці року виконувати завдання; діапазон значень (1-12)
dow - day of week - день тижня - в які дні тижня виконувати завдання; діапазон значень (0-7, 0 і 7 - цієї неділі, далі по порядку)
user - ім'я користувач - користувач від імені якого буде виконано завдання
command - співається команда - команда, яка буде запущена на виконання в зазначений час.

У перших п'яти полях можна вказувати не тільки число з діапазону, а й діапазон чисел, перерахування чисел, діапазон з кроком. Символ * - означає будь-яке значення. Детально почитати про значеннях можна в man 5 crontab. Ми ж розглянемо кілька прикладів.

Будьте уважні з полями 3 і 5 - день місяця і день тижня. Якщо числа є в обох полях, наприклад, * 6 5 * 1 root myscript. то запис означає запускати завдання о шостій годині 5-го числа кожного місяця або щопонеділка, але не щопонеділка 5-го числа.

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

29 12 * * * touch testfile

У першому другому полі вкажіть актуальне для вас час (на кілька хвилин більше поточного) і збережіть файл. Потім перевірте після призначеного часу, кореневу директорію користувача test і переконайтеся, що файл був створений:

Сьогодні ми поговоримо про процеси Linux. які носять назву - демони. а також подивимося яким чином відбувається управління демонами (або службами. якщо проводити паралель з Windows). Основна відмінність процесу-демона від звичайного користувача процесу, в тому, що демон не має керуючого терміналу, а відповідно взаємодіяти з ним користувач може тільки за допомогою інших програм або керуючих скриптів. Отже, в найпростішому випадку демон - це виконуваний файл або скрипт, який працює у фоновому режимі. Дуже часто такі файли закінчуються на букву d (від daemon): sshd, httpd, cupsd - хоча це не обов'язково.

Для того щоб управляти демоном існує керуючий скрипт для кожного демона. Розташовані такі скрипти, як правило, в каталозі /etc/init.d/. Називаються такі скрипти так як і сам демон (тільки без буквиd в кінці), хоча це не є непорушним правилом. Наприклад, скрипт /etc/init.d/ssh управляє демономsshd. який розташований в каталозі / usr / sbin /.

Що мається на увазі під керуванням демона? Це можливість виконати певні операції, такі як запуск демона, останов, перезапуск, примусовий останов і перезапуск, і деякі інші. Тому запускаючи керуючий скрипт ми обов'язково повинні передати йому параметр, який описує вироблене з демоном дію. Ці параметри строго визначені, а основні і найбільш часто зустрічаються це:

start - запуск демона
stop - зупинка демона
restart - перезапуск демона
reload - перезавантаження (перечитування конфігураційних файлів) параметрів демона
force-reload - примусове перезавантаження параметрів демона

Якщо ви самі будете писати подібний керуючий скрипт, то повинні пам'ятати, що він повинен обробляти як мінімум два параметри: start і stop. Можете відкрити будь-який скрипт з директорії /etc/init.d/ і побачити, як за допомогою конструкції case реалізована обробка керуючих параметрів.

Отже, давайте спробуємо зупинити і запустити демон cron. Для цього в каталозі /etc/init.d/ знаходиться керуючий скрипт /etc/init.d/cron:

debian: / home / igor # /etc/init.d/cron
Usage: /etc/init.d/cron.
debian: / home / igor # /etc/init.d/cron stop
Stopping periodic command scheduler: crond.
debian: / home / igor # ps ax | grep [c] ron
debian: / home / igor # /etc/init.d/cron start
Starting periodic command scheduler: crond.
debian: / home / igor # ps ax | grep [c] ron
6524. Ss 0:00 / usr / sbin / cron

Якщо запустити його без параметрів (рядок 1), то побачимо підказку які параметри необхідно передавати цьому скрипту (рядок 2). Пробуємо запустити з параметром stop (рядок 3) та перевіряємо, що демон зупинений (рядок 5). Потім запускаємо демон (рядок 6) та перевіряємо (рядок 8). Таким же чином відбувається управління іншими демонами.

Давайте тепер подивимося як відбувається запуск демонів під час завантаження операційної системи Linux і під час її зупинки. Як ви повинні пам'ятати в Linux є таке поняття як runlevel - рівень запуску системи. На кожному рівні запуску системи виконуються чітко задану кількість демонів. При переході з рівня на рівень, демони, які не повинні працювати - завершуються, а які повинні працювати - запускаються. Для того щоб вказати системі які демони на якому рівні запуску повинні стартувати або зупиняються в різних дистрибутивах існують спеціально призначені для цього утиліти. Але ми зараз подивимося на сам механізм роботи системи запуску демонів, щоб зрозуміти її суть.

У каталозі / etc є каталоги з ім'ям rcN.d. де N - це символ вказує на runlevel до якого відноситься каталог. Тобто маємо такі каталоги: rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d і rcS.d. Якщо подивитися вміст каталогів, то можна побачити, що в них містяться символічні лінки на скрипти з каталогу / etc / init.d /:

Символічні лінки іменуються відповідно до наступного правилом: спочатку йде латинський велика буква S або K. потім двозначне число і після цього точне назва скрипта на який посилається символічний лінк. Буква K в імені линка означає, що скрипт на який він посилається повинен бути виконаний з параметром stop. Тобто K11cron (рядок 6) означає, що буде виконано команда / etc / init.d / cron stop. Тобто буде зупинений демон cron. Відповідно буква S означає, що скрипт на який вказує лінк повинен виконається з параметром start. Двозначне число визначає порядок виконання скриптів, а відповідно порядок запуску або завершення демонів. Першими запускаються скрипти з меншими номерами. Таким чином реалізується дозвіл залежностей скриптів (демонів). Наприклад, демон cron повинен бути зупинений тільки після того як буде зупинений демон apache2 (рядки 6 і 3). Якщо у символічних лінків однаковий номер, то це означає, що демони не залежать одне від одного і скрипти можуть виконуватися в будь-якому порядку. Також потрібно відзначити, що спочатку виконуються всі скрипти з буквою K. а потім тільки все скрипти з буквою S.

Як відомо всі призначені для користувача процеси (а демони також до таких належать) починаються з процесу init. а який послідовно читає файл / etc / inittab. Серед інших в / etc / inittab є такі рядки:

l0: 0: wait: /etc/init.d/rc 0
l1: 1: wait: /etc/init.d/rc 1
l2: 2: wait: /etc/init.d/rc 2
l3: 3: wait: /etc/init.d/rc 3
l4: 4: wait: /etc/init.d/rc 4
l5: 5: wait: /etc/init.d/rc 5
l6: 6: wait: /etc/init.d/rc 6

Коли системи переходить на будь-якої runlevel. наприклад, на шостий, то виконується скрипт /etc/init.d/rc. якому в якості параметра передається номер рівня запуску - 6. В результаті своєї роботи скрипт / etc / init.d / rc починає виконувати відповідно до вищеописаними правилами всі скрипти на які є символічні посилання в каталозі /etc/rc6.d/. Якщо спрощено, то ім'я кожного символічного линка перетвориться з виду K01gdm в /etc/init.d/gdm stop. а S10sysklogd в /etc/init.d/sysklogd start.

Таким чином якщо ви хочете, щоб якийсь демон запускався (або зупинявся) на потрібному вам рівні вам потрібно створити відповідний символічний лінк у відповідному каталозі /etc/rcN.d/. Наприклад, якщо ви не хочете, щоб демон cron запускався на всіх рівнях значить з усіх каталогів /etc/rcN.d/ необхідно видалити лінк виду S80cron.

Якщо у вас є свій власний демон (наприклад mydaemon c керуючим скриптом mydaemon) і ви хочете його запускати на 5-му рівні запуску значить в каталозі /etc/rc5.d/ вам необхідно створити символічний лінк:

/ Linux $ sudo ln -s /etc/init.d/mydaemon /etc/rc5.d/S99mydaemon

Керуючий скрипт природно повинен знаходиться в каталозі /etc/init.d/.

Видаляючи і додаючи символічні лінки в каталоги /etc/rcN.d/ можна налаштувати запуск і останов демонів на відповідних рівнях запуску.

### BEGIN INIT INFO
# Provides: apache2
# Required-Start: $ local_fs $ remote_fs $ network $ syslog
# Required-Stop: $ local_fs $ remote_fs $ network $ syslog
# Default-Start: 2 3 4 5
# Default-Stop 0 1 6
# Short-Description: Start / stop apache2 web server
### END INIT INFO

Якщо виконати команду chkconfig без додаткових параметрів, то будуть створені символічні лінки з буквою S в каталогах /etc/rcN.d для рівнів запуску - 2 3 4 5, а з буквою K в каталогах /etc/rcN.d для рівнів запуску 0 1 6.

Схожі статті