padajici Apache
Zdenek Pytela
letty na mrakoplas.phil.muni.cz
Pondělí Duben 28 14:55:41 CEST 2003
Bohdan Milar píše:
> Dobrý den,
>
> mám RH72 na trvale běžícím stroji a potřebuju na něm rozběhnout intranet
> server (Apache, MySQL apod.). Už několikrát za dva týdny zkušebního provozu
> se mi ale stalo, že ráno Apache neběžel:
>
> -----
>
> [root na Ekonom root]# /etc/init.d/httpd status
> httpd neběží, ale PID soubor existuje
> [root na Ekonom root]# cat /var/log/httpd/error_log
> ...
> [Sat Apr 26 04:02:06 2003] [warn] child process 29272 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29273 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29274 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29275 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29276 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29277 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29278 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:06 2003] [warn] child process 29279 did not exit, sending
> another SIGHUP
> [Sat Apr 26 04:02:07 2003] [warn] child process 29272 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29273 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29274 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29275 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29276 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29277 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29278 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:07 2003] [warn] child process 29279 still did not exit,
> sending a SIGTERM
> [Sat Apr 26 04:02:11 2003] [notice] SIGHUP received. Attempting to restart
>
> [root na Ekonom root]# /etc/init.d/httpd restart
> Ukončuji httpd: [SELHALO]
> Startuji httpd: [ OK ]
>
> -----
>
> jindy to v error_logu vypadalo následovně:
>
> [Wed Apr 23 04:02:05 2003] [warn] child process 21656 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21657 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21658 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21659 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21660 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21661 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21662 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:05 2003] [warn] child process 21663 did not exit, sending
> another SIGHUP
> [Wed Apr 23 04:02:06 2003] [notice] SIGHUP received. Attempting to restart
> PHP Warning: Unable to load dynamic library '/usr/lib/php4/pgsql.so' -
> /usr/lib/php4/pgsql.so: cannot open shared object file: není souborem ani
> adresářem in Unknown on line 0
> [Wed Apr 23 04:02:08 2003] [notice] Apache/1.3.20 (Unix) (Red-Hat/Linux)
> mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01
> mod_auth_pgsql/0.9.9 configured -- resuming normal operations
> [Wed Apr 23 04:02:08 2003] [notice] suEXEC mechanism enabled (wrapper:
> /usr/sbin/suexec)
>
> Apache ale běžel (/usr/lib/php4/pgsql.so jsem již doinstaloval). Ve 04:02 se
Spíš si zakomentujte příslušnou sekci v php.ini.
> restartují všichni démoni - je to normální? V crontab jsem žádný záznam
> nenašel. V jiných případech to nevadí, ale Apache se z toho ale často
logrotate, ale nevím, proč rotujete každý den? To jste si musel
změnit sám, default je týdně.
> nevzpamatuje. Nevíte, jak tomu předejít?
Nedaří se restart služby httpd, protože zůstávají viset démoni a
nechce se jim odejít. Hlavně zjistěte, proč vám tam spojení zůstávají viset
- co u vás lidé chtějí, co je na tom tak náročného, a pak třeba změnit
různá nastavení v httpd.conf (počet volných démonů/vláken, počet
zpracovávaných požadavků) nebo php.ini.
Já jsem restart v podobné situaci vyřešil ve skriptu brutální
metodou, kdy se napřed udělá service httpd stop, pak se provádí různé akce,
a nakonec se ještě před service httpd start provede tato smyčka:
while (1)
{
`ps h -C httpd -o %c`;
if ($?)
{ print "httpd nebezi.\n"; last; }
else
{ print "httpd bezi... zkousim zabit...\n";
system qw(killall httpd); }
`ps h -C httpd -o %c`;
if ($?)
{ print "httpd uz nebezi.\n"; last; }
else
{ print "httpd se porad drzi... zkousim vetsi kladivo...\n";
system qw(killall -9 httpd); last; }
}
To by mělo zabrat ;-).
--
--Zdeněk Pytela, <letty na mrakoplas.phil.muni.cz>
Další informace o konferenci Linux