daemontools
daemontools — набір безкоштовних інструментів для керування сервісами в Unix. Був написаний Daniel J. Bernstein, як покращення inittab, ttys, init.d та rc.local, надаючи наступні можливості:
- Легке встановлення та видалення сервісів
- Легкий перший запуск сервісу
- Надійне перезавантаження сервісу
- Проста і надійна сигналізація
- Прозорість стану процесу
Тип | Управління сервісами unix. |
---|---|
Розробник | D. J. Bernstein |
Стабільний випуск | 0.76 |
Операційна система | Linux, Unix |
Мова програмування | C |
Ліцензія | public-domain softwared[1] |
Вебсайт | cr.yp.to/daemontools.html |
Як пише сам автор програми — основна відмінність від звичайних засобів запуску (структури каталогів 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.
Див. також
- Демон (програма)
- runit