Как настроить ведение логов 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Скрипт тоже очень прост:

cat / etc / sv / test / log / run

#!/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

3 ответа

Решение

В вашем вопросе есть ряд вопросов, которые не связаны с вопросом (кашель 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

Есть некоторые вещи, о которых вы не спросили в своем вопросе, и они, вероятно, не повлияют на поведение вашей установки. Но они не правы и на них стоит обратить внимание.

  1. The finishскрипт не предназначен для уничтожения службы. Он используется для уборки после завершения службы. Я не думаю, что вам это нужно в вашем случае использования. уже знает, как прекратить услугу. Для этого я дам вам прочитать больше вrunsvсправочная страница .

  2. Если вам когда-нибудь понадобится PID службы, вы можете получить его по адресу/etc/sv/test/supervise/pid. Но, скорее всего, оно вам никогда не понадобится.

Теперь к диагностике проблемы, о которой вы спросили. Журналы не работают, вероятно, потому, что вы добавилиlog/runпосле включения услуги. Следовательноlog/superviseкаталог не был создан.

Чтобы проверить, правда ли то, что я говорю. Проверьте, существует ли каталог, выполнив командуls /etc/sv/test/log/supervise. У вас должно получиться что-то вроде этого.

      $ sudo ls /etc/sv/test/log/supervise
control  lock  ok  pid  stat  status

Если вместо этого вы получите ошибкуls: cannot access '/etc/sv/test/log/supervise': No such file or directory. Затем отключите и снова включите службу. то есть. Удалите символическую ссылку наrunsvdir/default/и создайте его снова.

Другие вопросы по тегам