daemontools

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
daemontools
Тип Управління сервісами unix.
Розробник D. J. Bernstein
Стабільний випуск 0.76
Операційна система Linux, Unix
Мова програмування C
Ліцензія public-domain softwared[1]
Вебсайт cr.yp.to/daemontools.html

daemontools — набір безкоштовних інструментів для керування сервісами в Unix. Був написаний Daniel J. Bernstein, як покращення inittab, ttys, init.d та rc.local, надаючи наступні можливості:

  • Легке встановлення та видалення сервісів
  • Легкий перший запуск сервісу
  • Надійне перезавантаження сервісу
  • Проста і надійна сигналізація
  • Прозорість стану процесу

Як пише сам автор програми — основна відмінність від звичайних засобів запуску (структури каталогів rcx.d або rc.d або rc.local та інші) — є можливість перезапускати сервіс у випадку його падіння та наявність програми ведення та ротації логів (multilog). Перевага першої відмінності — очевидні, а автоматична ротація логів дозволяє не вичерпати (навмисно або випадково) вільне місце в каталозі /var/log. Також multilog дозволяє вести логи виводу програм, котрі не вміють віддавати вивід в syslog. Таким чином можна запускати як сервіс програми, котрі не були на це розраховані. Присутня практика використання цього пакету для запуску djbdns, qmail, squid та apache.

Принцип роботи[ред. | ред. код]

На запущеній системі функціонують наступні процеси daemontools:

  • svscanboot
  • readproctitle
  • svscan
  • supervise
  • svc

Svscanboot запускається при старті системи демоном init із inittab. Svscanboot запускає програму svscan в каталозі /service. В ньому будуть зберігатися відомості про сервіси, котрі daemontools буде контролювати — це підкаталоги, по одному для кожного сервісу. У випадку падіння svscanboot він перезапускається демоном init.

Svscan використовується для запуску і контролювання сервісів. Він запускає по одному процесу supervise, який і буде контролювати сервіс для кожного виявленого каталогу в /service (окрім тих, чиї імена починаються з точки). Svscan кожні 5 секунд перевіряє каталог /service на наявність нових підкаталогів. Якщо такі будуть виявлені — запускається нова копія supervise для кожного каталогу. Якщо в каталозі сервіса знаходиться каталог log, буде запущена ще одна копія supervise і створений pipeline між ними. Це створено для використання логування виводу програм минаючи syslog — використовуючи вивід програми із stdout і stderr. В daemontools для цих цілей використовується програма multilog — авторська заміна syslog, хоч і працює за схожими принципами. Також svscan перенаправляє вивід всіх дочірніх процесів supervise в readproctitle через pipeline, створений svscanboot.

Supervise є процесом, що безпосередньо контролює сервіс. Він викликається з параметром, в якому міститься ім'я каталогу для контролюємого сервісу в /service. В цьому каталозі він шукає скрипт run, який і запускає. Якщо процес, обслуговуємий supervise падає, supervise перезапускає його. Supervise створює в каталозі сервісу підкаталог supervise, в якому містяться дані про процес. Ці дані можуть бути прочитані за допомогою програми svstat. Для управління сервісом використовується програма svc.

Svc — це програма для управління сервісами. Формат виклику:

svc opts service

де opts — параметр, діючий на сервіс, а service — ім'я каталогу сервісу.

Readproctitle — запускається програмою svscanboot. При старті svscan, його stderr і stdout перенаправляються в readproctitle.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

  1. https://cr.yp.to/distributors.html