Очень долго перезапускается Apache?

Остановка делается таким скриптом:

PID=`cat /var/run/apache2.pid`<br/>
kill -TERM $PID<br/>
if [ -n &quot;${PID:-}&quot; ]; then<br/>
 i=0<br/>
 while kill -0 &quot;${PID:-}&quot; 2&gt; /dev/null; do<br/>
 if [ $i = '60' ]; then<br/>
 break;<br/>
 else<br/>
 if [ $i = '0' ]; then<br/>
 echo -n &quot; waiting &quot;<br/>
 else<br/>
 echo -n &quot;.&quot;<br/>
 fi<br/>
 i=$(($i+1))<br/>
 sleep 1<br/>
 fi<br/>
 done<br/>
fi



В итоге скрипт отрабатывает даже без ожидания (не рисует точечки), потом запускается некий скрипт, который работает с базой и т.д. (порядка 10-20 секунд) еще, а потом запускается Apache. Но в итоге имем ошибку:

(98)Address already in use: make_sock: could not bind to address 127.0.0.1:80<br/>
no listening sockets available, shutting down<br/>
Unable to open logs



Из которой видно, что старый апач так и висит запущенный. Где-то через 2-3 минуты удается запустить новую копию. Собственно вопрос, почему же он такой медленный на умирание. Раньше такого не наблюдалось, заметил это только после обновления Nginx на последнюю версию (apache — бэкэнд, nginx — фронтэнд).


P.S. nginx убивается прямо ПЕРЕД apache такой командой:

kill -TERM `cat /var/run/nginx/nginx.pid`


P.P.S. Apache/2.2.14 (Ubuntu), nginx/1.1.0, Ubuntu 10 LTS Server
  • Вопрос задан
  • 3064 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmZ
@DmZ
Скрипт отрабатывает «без ожидания (не рисует точечки)» — потому что он криво написан.
while kill -0 "${PID:-}" 2> /dev/null; do
будет всегда FALSE когда процесс запущен, т.к. kill -0 возвращает 0 (т.е. false) если процессу можно послать сигнал.
Если переписать скрипт на что-то типа такого, то оно будет ждать завершения процесса:
kill -0 ${PID:-}
while [ $? -eq 0 ]; do
.....
kill -0 ${PID:-}
done;


Далее следует проверить а кто именно занимает сокет и в каком он состоянии, например netstat -anptl | grep 127.0.0.1:80
И дальше от этого плясать (ну и логи во время остановки никто не запрещал смотреть).
Ответ написан
@s0rr0w
А если попробовать apache2ctl stop или apache2ctl -k stop?

Т.е. останавливать работу не через kill.
Ответ написан
@1099511627776
Пишу все что интересно и на всем на чем интересно
Может попробуете multi-apachectl для разных копий апача. Только что нагуглил
www.macnews.co.il/mageworks/scripts/multi-apachectl/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы