panic: MUTEX_LOCK (22) [op.c:352]

Gena Makhomed gmm at csdoc.com
Thu Aug 28 14:13:21 MSD 2008


On Thursday, August 28, 2008 at 0:09:02, Denis V Seleznyov wrote:

DVS> Имею сабж в логах при остановке nginx на RHEL5.2 x86_64.
DVS> Соответственно, не работает service nginx stop и service nginx restart.

скорее всего причина этих глюков в том,
что nginx был собран вместе с экспериментальным модулем:

--with-http_perl_module

если этот параметр configure убрать - все должно быть нормально.
в том смысле, как минимум не будет появляться этих ошибок
panic: MUTEX_LOCK (22) [op.c:352]

DVS> Я не очень ясно представляю себе логику работы редхатовского killproc,
DVS> поэтому не могу сказать почему это происходит.

исходник функции killproc можно найти в этом файле: /etc/init.d/functions

логика работы такая: если вызывать killproc $prog без параметров,
сначала посылается сигнал kill -TERM $pid, потом ждут 1 секунду
и посылают сигнал kill -KILL $pid

если функция вызывается с параметром, например  killproc $prog -QUIT
тогда только посылается сигнал, и происходит немедленный возврат из функции.

в тех инит-скриптах для nginx`а, что я видел дял RHEL -
функция stop реализована через killproc $prog -QUIT
а restart - как stop ; start

поэтому для nginx вполне может помочь заменить
killproc $prog -QUIT
на
killproc $prog

или в функции restart между stop и start вставить sleep 1 или 2 или 3
или (может быть) не использовать http_perl_module на production.

DVS>  Мне вообще особенно не мешает, однако коллеги могут нажать restart
DVS> и не посмотреть, поднялся ли сервис

пусть они вместо
service nginx restart
используют
service nginx reload

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list