Portál AbcLinuxu, 12. května 2025 11:23
Ahoj vsem, potreboval bych poresit automaticky restart apache, pokud konzumuje prilis cpu. Hledam, jak napsat podminku do skriptu, kterym to poresim
#!/bin/sh
SLUZBA = httpd
if ["$(pidof $SLUZBA)"]
then
else
invoke-rc.d $SLUZBA restart
fi
A misto pidof tam potrebuji neco, co zjisti, zda mi apache nekonzumuje prilis cpu, rekneme trebas ne vic, nez 80 procent.
Prikazem ps -eo pcpu,user | sort -k 1 -r | head -2 dostanu usera, ktery konzumuje nejvice cpu. Vystup jsou 2 radky, napr.
%CPU USER
9.7 root
Z tohohle potrebuji nejakym zpusobem poznat, ze user apache ma pres 80 a napsat podminku do restartovaciho skriptu. Nejsem moc zbehlej v sh a tak prosim o pomoc.
Dekuji
restartovat apache pokazde, kdyz zatizi CPU na 80% neni podle me prilis stastne. Proces totiz muze vytizit procesor jednorazove na nekolik sekund a pak se vratit do "normalnich" hodnot.. lepsi resenim by mohla byt instalace tohoto: http://sourceforge.net/projects/modoverload/
A pomuze to? Neco se tam kouse a me pak postupne pribyvaji instance, co si rozdeli cele CPU. A v logu kde nic tu nic, zadna chyba... Takze nevim, jestli nekde zacyklenej apache muze sam sebe resit pres overload. Ten muj skript to kazdou minutu zkontroluje a neni problem restartovat az kdyz to bude dve minuty po sobe... Jen musim dat do kupy tu podminku... Nicmene modul overload vyzkousim...
pokud to zpusobuje nejaka chyba ve skriptu, tak to samozrejme nepomuze nic jineho nez restarty
Tak jsem misto reseni vlastniho skriptu nainstaloval Monit a nakonfiguroval ho k hlidani apache...
check process apache with pidfile /var/log/httpd/httpd.pid
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 2 cycles then restart
if totalmem > 200.0 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if failed host www.*******.cz port 80 protocol http
and request "/o-webu"
with timeout 25 seconds
then restart
if failed host www.*******.cz port 443 type tcpssl protocol http
with timeout 25 seconds
then restart
if 5 restarts within 5 cycles then timeout
group server
BTW: Na tom serveru nejede zadny muj skript, jen x ruznych veci, od wordpressu, pres gallery2, openwebmail, ocs.. az po webove klienty k openfire. Na hledani co to mrznuti zpusobuje, kdyz v logu nic neni, nemam ted momentalne cas :)
Apache viz apache.conf se vaze na usera www-data,
takze asi takto zjistim maximalni procenta pod tim to
userem:
#!/bin/sh
SLUZBA = http
CPU = `ps -eo pcpu,user | sort -k 1 -r | grep www-data | head -1 | cut -d\ -f 2 | cut -d. -f 1`
if [ "$CPU" -gt 80 ]; then invoke-cr.d $SLUZBA restart
fi
exit 0
Ale priklanim se k nazoru, ze timto se problem nevyresi,
ale pouze odddali.
NN
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.