Re: "Правильные" демоны - не демоны?
Hello!
On Friday 28 August 2009 15:02:52 Alexander Galanin wrote:
> On Fri, 28 Aug 2009 14:51:55 +0400
> Alexey Pechnikov <pechnikov@mobigroup.ru> wrote:
>
> > Hello!
> >
> > On Friday 28 August 2009 14:07:02 Alexander Galanin wrote:
> > > rsyslog, к примеру (никто ведь не заставляет использовать только одну из
> > > многочисленных инкарнаций syslogd), умеет составлять имя файла из
> > > полей сообщения. Вот неизменённый кусок из документации, который, я
> > > надеюсь, ты осилишь допилить до нужного тебе:
> > >
> > > $template DynFile,"/var/log/%HOSTNAME%/%programname%.log"
> >
> > Этот процесс клонируется сколько-то раз (в том числе, каждый
> > разработчик может для себя один или более экземпляров запустить), при этом
> > меняется число NNN. Каждый процесс посылает сообщения разного уровня в
> > сислог (ошибки, информация, предупреждения, плюс еще нужно разделить
> > сообщения по имени модуля регекспами). Логи должны писаться с правами
> > пользователя, который запустил клон и желательно в ~/log/.... Положим,
> > NNN можно передать в самих сообщениях, rsyslog в этом случае логи разделит.
> > Но пользователя получить не удастся, такая информация в syslog не передается.
>
> А ты передай. Рядом с NNN.
Сервис может быть запущен пользователем X, но от имени www-data. Это только
система init знает, кто же на самом деле запустил.
> > Есть ли какая-то утилита, которая
> > умеет с stdout брать лог и пересылать в syslog - чтобы объединять сообщения
> > в единый лог-файл?
>
> Наверно я открою тебе великую тайну, но можно сделать ещё и
> $command >logfile 2>errlogfile
> причём безо всяких проходов через syslog.
> И потом останавливать этот так называемый сервис в том же xterm-е, в
> котором ты его запустил, с помощью Ctrl-C.
Полезнее ctrl+z; bg 1; fg 1 :-) Вот только настроить размеры буферов чтения
из stdout и записи в файл лога уже не так тривиально. Да еще ротировать нужно.
Для того syslog и полезен, что позволяет эффективно писать большие логи и
ротировать их. Но, к сожалению, на этом его достоинства практически
заканчиваются.
> А уж если тебе понадобится форвардить stdout и stderr в syslog, написать
> малюсенькую утилиту в 10 строк на си сможет кто угодно, у кого команда
> "man 3 syslog" не вызывает священного ужаса.
runit/daemontools это и так делают - берут с stdout/stderr и пишут в нужный лог
от имени пользователя, фильтруют и ротируют. Притом они точно знают, кто же
запустил данный сервис, даже если он выполняется с правами совсем иного юзера
и могут логировать в домашнюю директорию с нужными правами. И буферы
ввода-вывода позволяют настроить.
Да, если вам так просто написать эту самую малюсенькую утилиту, которая будет
через init-систему определять истинного владельца (по имени сервиса можно
найти скрипт запуска), собирать логи, менять конфигурацию сислога для
логирования в нужную директорию и проч., хотелось бы это увидеть :-)
Best regards, Alexey Pechnikov.
http://pechnikov.tel/
Reply to: