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.
Див. також[ред. | ред. код]
Посилання[ред. | ред. код]
- Офіційний сайт
- Інструкція (рос.)