Назад | Перейти на главную страницу

Как настроить ведение журнала runit

У меня возникли проблемы с настройкой службы с правильным ведением журнала при запуске. Вот краткий обзор файлов и скриптов, которые я создал в соответствии с документацией 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

Но каталог журналов пуст ... Что мне не хватает? Где вся информация журнала?

Обновить:

Я также убедился, что все скрипты исполняются.

обновление 2:

Похоже, что sv по какой-то причине не запускается скрипт регистрации!

$ sv s test
run: test: (pid 14612) 5s; down: log: 0s, normally up, want up

обновление 3:

Если вы хотите остановить сценарий ведения журнала, вам необходимо выполнить:

$ sv d test/log

В вашем вопросе есть несколько вещей, которые не имеют отношения к вопросу (кашель pid файлы кашель), но давайте займемся вопросом собственноручно.


Первый, ведение журнала необязательно. Нет жесткого требования, чтобы у вас был регистратор для определения службы, хотя в большинстве случаев он вам понадобится.

Второй, поскольку регистратор фактически подчинен вашей службе, имеет смысл ./log содержит необходимые настройки для ведения журнала.

Третий, когда вы выключаете службу, регистратор остается включенным по какой-то причине - он предназначен для сбора оставшихся данных, пока служба не завершится. Это было сделано, чтобы предотвратить потерю данных журнала не только при выходе из строя службы, но и в случае сбоя службы. Это нормально, что регистратор продолжает работать, даже когда служба не работает. Запуск службы просто повторно подключит новый экземпляр службы к существующему регистратору.

Четвертый, вы правы, вы можете остановить регистратор, явно присвоив ему имя sv команда. Это соответствует существующим daemontools парадигма.

Пятый, если у вас нет необычных потребностей в регистрации сбоя программы svlogd (что очень маловероятно), вам не нужно беспокоиться об ее удалении и т. д. Простая сигнализация о ее отключении вызовет runsv процесс надзора для его прекращения, никаких PID или kill требуются команды.

Если у вас есть дополнительные вопросы, я рекомендую связаться с список рассылки надзора, который малошумный и имеет много знающих людей, которые ответят на ваши вопросы. Зеркало только для чтения также можно найти на mail-archive.org.

Итак, после некоторых проб и ошибок я нашел решение.

Обратите внимание на следующие моменты:

  1. Файл конфигурации: обратите внимание, что это довольно нелогично. Если вы отслеживали службу в /etc/sv/testи каталог журналов в /etc/sv/test/log вы ожидали этого config будет в /etc/sv/test/log/config! Но обратите внимание, файл читается с того места, где вы запускаете svlogd. Это означает: если ваш сценарий журнала выполняется в /var/log/test (последний аргумент svlogd) здесь ожидается файл конфигурации. Так что напишите свою конфигурацию в var/log/test/configЭлемент списка
  2. Перезагрузка конфигурации: Если вы измените файл конфигурации, вы можете остановить и запустить скрипт с помощью:
$ sv down test/log
$ sv start test/log
ok: run: test/log: (pid 21190) 0s