--- title: "runit: система инициализации" category: Linux tags: Debian, Ubuntu, Linux, инициализация, runit, summary: ... ### Установка [runit](http://smarden.org/runit/) — это система инициализации со встроенными средствами контроля за процессами. Установка в Ubuntu: ```sh sudo apt-get install runit runit-systemd ``` ### Запуск сервисов от непривилегированного пользователя Чтобы разрешить непривилегированному пользователю `user` управлять собственной конфигурацией для runit, нужно с правами суперпользователя выполнить: ```sh mkdir -p /etc/service/run-user/supervise cat > /etc/service/run-user/run << EOF #!/bin/sh exec 2>&1 exec chpst -u user runsvdir /home/user/sv EOF chmod +x /etc/service/run-user/run ``` В результате в каталоге `/home/user/sv` пользователь `user` сможет создавать собственные правила управления сервисами. ### Пример сервиса Для запуска сервера Redis пользователем `user` нужно создать файл конфигурации `/home/user/redis/etc/redis.conf`: ``` daemonize no port 5079 tcp-backlog 128 timeout 0 tcp-keepalive 60 loglevel warning databases 1 save 300 10 dir /home/user/redis/var dbfilename surok.rdb client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 4mb 1mb 60 client-output-buffer-limit pubsub 4mb 1mb 60 maxclients 50 ``` Запускаемый сервер должен запускаться не в фоновом режиме, чтобы runit мог контролировать его состояние. Скрипт `/home/user/sv/redis/run`, который `runit` использует для запуска процесса: ```sh #!/bin/sh WORKDIR=/home/user/redis cd "${WORKDIR}" || exit 1 exec 2>&1 exec redis-server etc/redis.conf ``` Журналирование выполняется с помощью входящей в состав пакета runit программы `svlogd`. Скрипт для его запуска должен находиться в подкаталоге `log` (`/home/user/sv/redis/log/run`): ```sh #!/bin/sh -e LOGDIR=/home/user/redis/log mkdir -p "${LOGDIR}" exec svlogd -tt "${LOGDIR}"" ```