dsp-site/wiki/Linux/Runit/runit.md
2019-04-23 20:40:06 +03:00

89 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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}""
```