У меня возникли проблемы с настройкой службы с правильным ведением журнала при запуске. Вот краткий обзор файлов и скриптов, которые я создал в соответствии с документацией runit и другими ресурсами, которые я нашел в интернте:
Я использую runit под debian, поэтому:
/etc/service/test
-> ссылка на /etc/sv/test
.
В разделе `/ etc / sv / test:
$ ls /etc/sv/test
finish log run
$ ls /etc/sv/test/log
config run
Скрипты run
и finish
довольно просты:
root@data1:/etc/sv/test $ cat /etc/sv/test/run
#!/bin/sh
touch /tmp/pid
echo $$ > /tmp/pid
while true; do
date
sleep 3
done
root@data1:/etc/sv/test $ cat /etc/sv/test/finish
#!/bin/sh
kill `cat /tmp/pid`
И log
скрипт тоже очень прост:
кошка / и т.д. / SV / тест / журнал / запустить
#!/bin/sh
exec svlogd -t /var/log/test
Каталог /var/log/test
существует, и служба работает.
$ sv s test
run: test: (pid 11547) 536s; down: log: 1s, normally up, want up
Но каталог журналов пуст ... Что мне не хватает? Где вся информация журнала?
Я также убедился, что все скрипты исполняются.
Похоже, что sv
по какой-то причине не запускается скрипт регистрации!
$ sv s test
run: test: (pid 14612) 5s; down: log: 0s, normally up, want up
Если вы хотите остановить сценарий ведения журнала, вам необходимо выполнить:
$ sv d test/log
В вашем вопросе есть несколько вещей, которые не имеют отношения к вопросу (кашель pid файлы кашель), но давайте займемся вопросом собственноручно.
Первый, ведение журнала необязательно. Нет жесткого требования, чтобы у вас был регистратор для определения службы, хотя в большинстве случаев он вам понадобится.
Второй, поскольку регистратор фактически подчинен вашей службе, имеет смысл ./log
содержит необходимые настройки для ведения журнала.
Третий, когда вы выключаете службу, регистратор остается включенным по какой-то причине - он предназначен для сбора оставшихся данных, пока служба не завершится. Это было сделано, чтобы предотвратить потерю данных журнала не только при выходе из строя службы, но и в случае сбоя службы. Это нормально, что регистратор продолжает работать, даже когда служба не работает. Запуск службы просто повторно подключит новый экземпляр службы к существующему регистратору.
Четвертый, вы правы, вы можете остановить регистратор, явно присвоив ему имя sv
команда. Это соответствует существующим daemontools
парадигма.
Пятый, если у вас нет необычных потребностей в регистрации сбоя программы svlogd (что очень маловероятно), вам не нужно беспокоиться об ее удалении и т. д. Простая сигнализация о ее отключении вызовет runsv
процесс надзора для его прекращения, никаких PID или kill
требуются команды.
Если у вас есть дополнительные вопросы, я рекомендую связаться с список рассылки надзора, который малошумный и имеет много знающих людей, которые ответят на ваши вопросы. Зеркало только для чтения также можно найти на mail-archive.org.
Итак, после некоторых проб и ошибок я нашел решение.
Обратите внимание на следующие моменты:
/etc/sv/test
и каталог журналов в /etc/sv/test/log
вы ожидали этого config
будет в /etc/sv/test/log/config
! Но обратите внимание, файл читается с того места, где вы запускаете svlogd
. Это означает: если ваш сценарий журнала выполняется в /var/log/test
(последний аргумент svlogd
) здесь ожидается файл конфигурации. Так что напишите свою конфигурацию в var/log/test/config
Элемент списка$ sv down test/log $ sv start test/log ok: run: test/log: (pid 21190) 0s