LINUX.ORG.RU
ФорумAdmin

Как ротировать логи httpd не убивая процессов запущенных из под httpd?


0

0

Из под веб сервера запускаются процессы, которые могут работать несколько часов. Т.е. при заходе на некоторую страничку запускается процесс (соответственно его юзер и группа - httpd), который несколько часов делает своё чёрное дело.

Если в это время выполняется ротация логов: /var/log/httpd/*log { missingok notifempty postrotate /bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null` 2> /dev/null || true endscript }

ТО процессы запущенные из под httpd убиваются :-( httpd рестартится, пишет уже новый лог, а всё что из под него было запущено накрывается медным тазом

Вопрос: Как ротировать логи, чтобы запущенные из под httpd процессы не убивались?

anonymous

> /bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null`

> ТО процессы запущенные из под httpd убиваются :-( httpd рестартится, пишет уже новый лог, а всё что из под него было запущено накрывается медным тазом

дяденька, ты чо? вон та команда ни разу не убивает апача, она только просит его закрыть логи и открыть их по новой. так как перед этим логротате старые логи переимовал, то новые -- это уже чистый файл

man httpd уже скорее

anonymous
()
Ответ на: комментарий от anonymous

Теория - вещь хорошая, но на практике процессы киляются :-(

Т.е. если при загрузке какой-то странички запустился в бекграунде процесс... Процедура примерно такая: в cgi-скрипте вызов в бэкграунде (через fork и c закрытием STDERR, STDOUT, STDIN ... т.е. чтобы нормально запустился без привязки к cgi-скрипту) бинарника.

Этот бинарник продолжает трудиться и после завершения вызвавшего его cgi-скрипта

httpd работает под юзером nobody и все его процессы, и cgi-скрипт и бинарник, тоже.

При ротации (выполнении bin/kill -HUP `cat /var/log/httpd/httpd.pid 2>/dev/null`) бинарник умирает

В чём может быть причина, если этого не должно быть и чё делать???

anonymous
()

cronolog спасет отца русской демократии

FatBastard ★★
()
Ответ на: комментарий от anonymous

почитал -- точно, прибиваются

попробуй сигнал USR1 или man apachectl

anonymous
()

/var/log/apache/access_log /var/log/apache/error_log /var/log/apache/mod_gzip.log {
monthly
delaycompress
nocreate
postrotate
/usr/sbin/apachectl graceful
endscript
sharedscripts
}

ip1981 ☆☆
()
Ответ на: комментарий от ip1981

Спасибо. Почитал man и возник вопрос. В manе сказано что в этом случае старые логи не будут закрыты сразу. Каккова задержка ротации логов и что будет если какие-то процессы будут работать несколько дней или больше. Не будет ли ожидаться завершение процессов прежде чем выполнится ротация?

anonymous
()
Ответ на: комментарий от anonymous

Если старый лог переименован, то будет писаться в переименованный файл. Я так думаю.

Если старый лог скопирован в ротированный, и старый лог удален и создан заново пустой, то сообщения от httpd потеряются.

А вот если старому логу сделано "> httpd.log", то есть он обнулен без удаления, не знаю, что будет

ansky ★★★★★
()

А через nohup запустить долгоиграющие процессы никак нельзя?

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.