runit для своих сервисов

Ответить
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

runit для своих сервисов

Сообщение ya »

Переадресация ошибок в стандартный вывод нужна для их логгирования. Выполняется логгирование, если в каталоге /etc/sv/<название сервиса>/log/ разместить файл run вида

Код: Выделить всё

#!/bin/bash
LOG_FOLDER=/var/log/<название сервиса>
mkdir -p $LOG_FOLDER
exec svlogd -tt $LOG_FOLDER
Сервисы, расположенные в каталоге /etc/sv/, не выполняются, пока ссылки на них не будут размещены в каталоге /etc/service/.

Как только вы сделаете ln -s /etc/sv/<название сервиса> /etc/service/<название сервиса>, сервис runsvdir увидит новый сервис, и запустит его. Более того, в случае остановки сервиса он будет автоматически перезапущен.

При использовании svlogd логи размещаются в папке, которую Вы указали при её запуске.

Запускать, останавливать, перезапускать сервисы можно с помощью команды sv (start|stop|restart...) <название сервиса>.

Кроме того, при запуске сервиса появится каталог /etc/service/<название сервиса>/supervise, в котором будут расположены очень полезные файлы и потоки:
pid — идентификатор процесса Unix;
stat — человеко-читаемое состояние сервиса
status — машинно-читаемое состояние процесса
control — поток управления
и так далее...

Можно отметить, что для остановки или запуска процесса достаточно открыть поток control на запись, и отправить туда символ d (от down) или u (от up) соответственно.

В комплекте с runit поставляется утилита chpst, которая позволяет выполнять сервисы с дополнительной настройкой (ограничивать размер памяти, запускать из под определенного пользователя, с другим уровнем nice и т.д.).
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: runit для своих сервисов

Сообщение ya »

Автозапуск для runit

Код: Выделить всё

sudo mkdir /etc/service/myservice
sudo vi /etc/service/myservice/run

Код: Выделить всё

#!/bin/sh
exec /path/to/your/executable

Код: Выделить всё

sudo chmod +x /etc/service/myservice/run
проверить статус:

Код: Выделить всё

sv status myservice
логи

Код: Выделить всё

sudo mkdir /etc/service/myservice/log
sudo vi /etc/service/myservice/log/run

Код: Выделить всё

#!/bin/sh
exec svlogd -tt /var/log/myservice

Код: Выделить всё

sudo chmod +x /etc/service/myservice/log/run
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: runit для своих сервисов

Сообщение ya »

скрипт для запуска сервиса с сетевой конфигурацией

Код: Выделить всё

#!/bin/sh

# Настройка переменных окружения
export MY_SERVICE_HOST="0.0.0.0"
export MY_SERVICE_PORT="8080"

# Проверка доступности сети (если необходимо)
# ping -c 1 example.com

# Запуск сервиса
exec /path/to/your/executable --host=$MY_SERVICE_HOST --port=$MY_SERVICE_PORT
Usage: /etc/init.d/networking {start|stop|reload|restart|force-reload}
Ответить