dsp-site/wiki/Linux/Runit/runit.adoc

92 lines
2.5 KiB
Plaintext
Raw Normal View History

2019-06-01 21:08:41 +00:00
= runit: система инициализации
:category: Linux
:tags: Debian, Ubuntu, Linux, инициализация, runit,
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
== Установка
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
http://smarden.org/runit/[runit] — это система инициализации со
2019-04-20 20:24:14 +00:00
встроенными средствами контроля за процессами.
Установка в Ubuntu:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 20:24:14 +00:00
sudo apt-get install runit runit-systemd
2019-06-01 21:08:41 +00:00
----
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
== Запуск сервисов от непривилегированного пользователя
2019-04-20 20:24:14 +00:00
Чтобы разрешить непривилегированному пользователю `user` управлять
собственной конфигурацией для runit, нужно с правами суперпользователя
выполнить:
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 20:24:14 +00:00
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
2019-06-01 21:08:41 +00:00
----
2019-04-20 20:24:14 +00:00
В результате в каталоге `/home/user/sv` пользователь `user` сможет
создавать собственные правила управления сервисами.
2019-06-01 21:08:41 +00:00
== Пример сервиса
2019-04-20 20:24:14 +00:00
Для запуска сервера Redis пользователем `user` нужно создать файл
конфигурации `/home/user/redis/etc/redis.conf`:
2019-06-01 21:08:41 +00:00
[source,text]
----
2019-04-20 20:24:14 +00:00
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
2019-06-01 21:08:41 +00:00
----
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
Запускаемый сервер должен запускаться не в фоновом режиме, чтобы `runit`
мог контролировать его состояние.
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
Скрипт `/home/user/sv/redis/run`, который `runit` использует для запуска
процесса:
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
[source,sh]
----
#!/bin/sh -e
2019-04-20 20:24:14 +00:00
WORKDIR=/home/user/redis
cd "${WORKDIR}" || exit 1
exec 2>&1
exec redis-server etc/redis.conf
2019-06-01 21:08:41 +00:00
----
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
Журналирование выполняется с помощью входящей в состав пакета runit
программы `svlogd`. Скрипт для его запуска должен находиться в
подкаталоге `log` (`/home/user/sv/redis/log/run`):
2019-04-20 20:24:14 +00:00
2019-06-01 21:08:41 +00:00
[source,sh]
----
2019-04-20 20:24:14 +00:00
#!/bin/sh -e
LOGDIR=/home/user/redis/log
mkdir -p "${LOGDIR}"
exec svlogd -tt "${LOGDIR}""
2019-06-01 21:08:41 +00:00
----