Как настроить ведение логов 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.
Итак, после некоторых проб и ошибок я нашел решение.
Важно отметить следующие вещи:
- Файл конфигурации: обратите внимание, что он довольно интуитивно понятен. Если вы контролировали сервис под
/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
Есть некоторые вещи, о которых вы не спросили в своем вопросе, и они, вероятно, не повлияют на поведение вашей установки. Но они не правы и на них стоит обратить внимание.
The
finish
скрипт не предназначен для уничтожения службы. Он используется для уборки после завершения службы. Я не думаю, что вам это нужно в вашем случае использования. уже знает, как прекратить услугу. Для этого я дам вам прочитать больше вrunsv
справочная страница .Если вам когда-нибудь понадобится 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/
и создайте его снова.