14 авг. 2010 г.

Runit. Супервизор сервисов

Установка (из AUR)
yaourt -S runit
Подробности под катом.

Для управления сервисами нужно создать каталоги с их именами, содержащие как минимум исполняемые файлы run:
/etc/runit/runsvdir/all/
    service1/
        run
    service2/
        run
Предполагается такая схема работы: в /etc/runit/runsvdir/all/ хранятся все описания сервисов. В /etc/runit/runsvdir/current/ находятся символические ссылки из предыдущей директории, которые показывают, какими именно сервисами будет управлять runit.
Пример:
Создаем сервис hgweb для отображения списка Mercurial-репозиториев через HTTP:
mkdir /etc/runit/runsvdir/all/hgweb
Пишем скрипт для запуска /etc/runit/runsvdir/all/hgweb/run:
#!/bin/sh
exec 2>&1

exec /usr/bin/spawn-fcgi -n -s /tmp/hg.sock -u hgweb-user -U http-server-user -- /path/to/executable/hgweb.fcgi
Создаем символическую ссылку на созданную директорию сервиса в /etc/runit/runsvdir/current:
ln -s /etc/runit/runsvdir/all/hgweb/ /etc/runit/runsvdir/current/hgweb
Добавляем запуск runsvdir в /etc/rc.local:
bash -c '/sbin/runsvdir -P /etc/runit/runsvdir/current/ &'
Для управления сервисами можно использовать программу sv. Например:
sv status hgweb

run: hgweb: (pid 3955) 107s
Остальные команды можно посмотреть в man sv.
Вот такую картину наблюдаем теперь:
init─┬─6*[agetty]
     ├─ccpd
     ├─crond
     ├─cupsd
     ├─dhcpcd
     ├─lighttpd
     ├─nmbd
     ├─2*[ntpd]
     ├─runsvdir─┬─runsv───python───5*[{python}]
     │          ├─runsv───index_dispatche───5*[{index_dispatch}]
     │          └─runsv───getinfo_dispatc───5*[{getinfo_dispat}]
     ├─sadc
     ├─screen───ventrilo_srv
     ├─2*[screen───start.h───hlds_run───hlds_i686───2*[{hlds_i686}]]
     ├─screen───bash───start.sh───cod4_lnxded
     ├─smbd───2*[smbd]
     ├─sshd───sshd───sshd───bash───pstree
     ├─syslog-ng───syslog-ng
     ├─transmission-da───2*[{transmission-d}]
     └─udevd───2*[udevd]

Комментариев нет :

Отправить комментарий