Непрерывно работающая программа создает лог перенаправлением своего стандартного вывода в файл.
Программа не моя. У меня как у админа естественно возникла проблема как сделать ротацию ее логов по крону, без перезапуска самой программы.Так как логи там после 2ГБ убивают эту прогу в core.
если через mv делать то новый файл лога не создается пока не перезапустить программу.
при копировании файла и выполнении echo >logfile.log размер файла не уменьшается(изза сброса буфера наверно).Как обнулить файл открытый на запись?
Както можно это сделать системными средствами?
Если нет, что именно попросить сделать разработчика для организации ротации логов по cron.
(чтото самое простое).
И как это правильно сделать по феншую?
>создает лог перенаправлением своего стандартного вывода в файл.
>как сделать ротацию ее логов по крону, без перезапуска самой
>Как обнулить файл открытый на запись?
>Както можно это сделать системными средствами?Не надо его обнулять. Пусти програму, которая умеет брать со stdin-а, писать в файл/log _и_ ротировать его по сигналу. На вскидку в голову приходит логгер из daemontools г-на djb. http://cr.yp.to/daemontools/multilog.html -- см.про SIGALARM. Наверняка то же самое умеют делать куууча других логгеров-демонизаторов или типа того.
>Если нет, что именно попросить сделать разработчика для организации ротации логов по
>cron.
>(чтото самое простое).Ну, как, по сигналу закрывать лог, переименовывать его и создавать новый с тем же именем. Но тогда (если "внутри" програмы) -- со стдин-ом "придётся" расстаться.
>И как это правильно сделать по феншую?
tvoya_kryutaya_programka | logger
+
"kill -SIGALARM" или типа того -- в cron-е
(+ там же где-то собирать-паковать-обрабатывать "награбленное")
>>создает лог перенаправлением своего стандартного вывода в файл.
>>как сделать ротацию ее логов по крону, без перезапуска самой
>>Как обнулить файл открытый на запись?
>>Както можно это сделать системными средствами?
>Не надо его обнулять. Пусти програму, которая умеет брать со stdin-а, писать
>в файл/log _и_ ротировать его по сигналу. На вскидку в голову
>приходит логгер из daemontools г-на djb. http://cr.yp.to/daemontools/multilog.html -- см.про SIGALARM. Наверняка
>то же самое умеют делать куууча других логгеров-демонизаторов или типа того.я бы не советовал заморачиваться на этот раритет ))
у апача есть тулза нето logrotate, нето rotatelog - приклеивается на stdout
а вообще проблема решается парой строчек на перле - нюхаем stdin, считаем кол-во строк, далее ротация если кол-во превысило порог.>>Если нет, что именно попросить сделать разработчика для организации ротации логов по
>>cron.
>>(чтото самое простое).
>
>Ну, как, по сигналу закрывать лог, переименовывать его и создавать новый с
>тем же именем. Но тогда (если "внутри" програмы) -- со стдин-ом
>"придётся" расстаться.например в апаче по "kill HUP" просто происходит close-open текущего файла
так гораздо удобнее, пользовательно сам решает че делать с полученным логом, а не разработчик который поленился и сделал какуюнибудь нееудобную шнягу
>>И как это правильно сделать по феншую?
>
>tvoya_kryutaya_programka | logger
> +
>"kill -SIGALARM" или типа того -- в cron-е
>(+ там же где-то собирать-паковать-обрабатывать "награбленное")
>>>создает лог перенаправлением своего стандартного вывода в файл.Всё бы хорошо, но вот я понял что программа сама, внутри себя перенаправляет stdout в файл. Тогда внешние логгеры обломятся ...
Аффтар! Объясни тщательнее ...
А - да! На вопрос как правильно - дык это целая наука :) Я к примеру не люблю когда все что шло на стдаут - уходит в лог. Как по мне для лога нужно свой хандлер открыть. Если надо - могу объяснить почему.
>>>>создает лог перенаправлением своего стандартного вывода в файл.
>Всё бы хорошо, но вот я понял что программа сама, внутри себя
>перенаправляет stdout в файл. Тогда внешние логгеры обломятся ...+1
именно так. там чтото типа freopen(stdin..... и freopen(stderr
создают два отдельных файла.
Может на то место подсунуть fifo?