after rotating log files apache continues logging to deleted file, but not in newly created one Steps to Reproduce: 1. tail -f /var/log/httpd/access_log 2. logrotate -f /etc/logrotate.d/apache 3. HEAD localhost 3. ls -l /var/log/httpd/access_log Actual Results: in tail window: 127.0.0.1 - - [13/Oct/2003:13:40:39 +0400] "HEAD / HTTP/1.1" 200 0 ls: -rw-r--r-- 1 root apache 0 Oct 13 13:39 /var/log/httpd/access_log Expected Results: in tail window: nothing ls: -rw-r--r-- 1 root apache 68 Oct 13 13:39 /var/log/httpd/access_log
the problem is in reload() function in /etc/rc.d/init.d/httpd adding "--name libhttpd.ep" to stop_daemon parameters in that function resolves the problem.
please see attachment -- this will be in 1.3.28rusPL30.18-alt7
Created attachment 294 [details] fixed initscript
fixed in 1.3.28rusPL30.18-alt7
see #2950, btw
Still here. [lakostis@lks lakostis]$ rpm -q service service-0.5.2-alt1 [lakostis@lks lakostis]$ rpm -q apache apache-1.3.29rusPL30.18-alt2 [lakostis@lks lakostis]$ ls /etc/init.d/* | grep http /etc/init.d/httpd [lakostis@lks lakostis]$ su -c "ls /etc/logrotate.d/ | grep apache" Password: apache [lakostis@lks lakostis]$ - т.е. .rpmnew нет.
Гм. У меня сейчас указанный тест приводит к попаданию информации в access_log (и `tail -f`, который его переоткрывает, видимо). ALT Linux Sisyphus (20040122) Костик, можешь проверить пошагово и конкретизировать?
Предложено делать при logrotate не condreload, а condrestart. Так будет в 1.3.29rusPL30.18-alt6. --- <dmi> http://www.webmasterworld.com/forum23/1740.htm <dmi> там говорят надо делать рестарт <dmi> когда логи уже созданы <dmi> --- /etc/logrotate.d/apache.orig 2004-03-14 14:46:13 +0300 <dmi> +++ /etc/logrotate.d/apache 2004-03-14 14:46:23 +0300 <dmi> @@ -4,7 +4,7 @@ <dmi> sharedscripts <dmi> create 0644 root apache <dmi> postrotate <dmi> - /sbin/service httpd condreload >/dev/null <dmi> + /sbin/service httpd condrestart >/dev/null <dmi> endscript <dmi> } <dmi> @@ -14,6 +14,6 @@ <dmi> sharedscripts <dmi> create 0644 root apache <dmi> postrotate <dmi> - /sbin/service httpd-perl condreload >/dev/null <dmi> + /sbin/service httpd-perl condrestart >/dev/null <dmi> endscript <dmi> }
вроде поправлено
Не надо делать condrestart - всё равно не поможет. Проблема в init.d/httpd - там в reload() использована неправильная конструкция: stop_daemon --lockfile "$LOCKFILE" -HUP Поясню, что происходит: 1. первый condreload: "$LOCKFILE" на месте, процессу посылается HUP, после чего "$LOCKFILE" удаляется. 1. второй condreload/condrestart: "$LOCKFILE" отсутствует, процессу ничего не посылается. Если stop_daemon используется для посылки сигнала, а не для завершения работы демона, то --lockfile не только не нужен, но даже вреден. Workarounded in service-0.5.4-alt1 Ещё раз: не надо делать condrestart, ибо condreload тоже работает.
Спасибо, пошел фиксить. Имеет ли смысл продублировать это пояснение/иллюстрацию в документации service?
Что характерно -- в httpd-perl.init.Sisyphus этот момент был оформлен правильно ;-]
Та же проблема есть в /etc/rc.d/init.d/ dovecot httpd2 kadmin krb5kdc psion slurpd Именно поэтому $ rpmquery --lastchange service * Sun Jun 27 2004 Dmitry V. Levin <ldv@altlinux> 0.5.4-alt1 - functions/stop_daemon: + when sending HUP, do not remove lockfile to workaround bugs in third party rc scripts.
fixed in 1.3.31rusPL30.20-alt5