= runit: система инициализации :category: Linux :tags: Debian, Ubuntu, Linux, инициализация, runit, == Установка http://smarden.org/runit/[runit] — это система инициализации со встроенными средствами контроля за процессами. Установка в Ubuntu: [source,sh] ---- sudo apt-get install runit runit-systemd ---- == Запуск сервисов от непривилегированного пользователя Чтобы разрешить непривилегированному пользователю `user` управлять собственной конфигурацией для runit, нужно с правами суперпользователя выполнить: [source,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`: [source,text] ---- 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` использует для запуска процесса: [source,sh] ---- #!/bin/sh -e 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`): [source,sh] ---- #!/bin/sh -e LOGDIR=/home/user/redis/log mkdir -p "${LOGDIR}" exec svlogd -tt "${LOGDIR}"" ----