Re: core dump при обновлении на лету

Maxim Dounin mdounin на mdounin.ru
Ср Ноя 16 15:37:24 UTC 2016


Hello!

On Wed, Nov 16, 2016 at 02:39:35PM +0000, Andriy Tovstik wrote:

> Добрый день!
> 
> Столкнулся со следующей ситуацией.
> Платформа:
> # uname -a
> SunOS sunos 5.11 11.3 i86pc i386 i86pc
> 
> Пытаюсь обновить бинарник на лету, согласно
> http://nginx.org/ru/docs/control.html#upgrade
> исходная версия nginx 1.11.3
> целевой бинарник nginx 1.11.5
> 
> конфигурационный файл - дефолтный, без изменений.
> 
> опции сборки:
> nginx version: nginx/1.11.3
> built by gcc 4.8.2 (GCC)
> configure arguments: --with-cc=gcc
> 
> nginx version: nginx/1.11.5
> built by gcc 4.8.2 (GCC)
> configure arguments: --with-cc=gcc
> 
> Как указано в мануале, заменяю бинарный файл, делаю
> kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
> после чего nginx падает в core dump:

[...]

> что я делаю не правильно?

Не раскрыта процедура "заменяю бинарный файл".

Если новый файл просто скопировать поверх старого с помощью cp - 
будет как раз core dump скорее всего.

Нужно убрать старый файл в сторону (или удалить), после чего 
положить новый с тем же именем:

    mv /path/to/nginx /path/to/nginx.old
    cp objs/nginx /path/to/nginx

Ну или положить рядом новый файл, а потом атомарно переименовать:

    cp objs/nginx /path/to/nginx.new
    mv /path/to/nginx.new /path/to/nginx

Важно, чтобы в результате не получилось так, что работающий 
бинарник переписали по живому (и именно это сделает стандартный 
cp), а вместо этого был создан новый файл с тем же именем.

При установке из исходников - правильные операции умеет 
проделывать "make install", им и имеет смысл пользоваться.

-- 
Maxim Dounin
http://nginx.org/



Подробная информация о списке рассылки nginx-ru