CentOS 6 - не работает service nginx upgrade
Gena Makhomed
gmm на csdoc.com
Вт Апр 4 20:47:27 UTC 2017
Здравствуйте!
CentOS 6 64-bit, nginx из официального репозитория mainline.
При обновлении nginx через yum update с версии 1.11.12 до 1.11.13
не сработала команда service nginx upgrade
Вручную запускаю service nginx upgrade - тоже ничего не работает.
Как выяснилось, причина в том, что service nginx status возвращает
"nginx dead but pid file exists" и завершается с кодом ошибки 1.
Но самое интересное в том, что nginx жив и нормально работает:
# cat /var/run/nginx.pid
13212
# pstree -cp
init(1)─┬─nginx(13212)─┬─nginx(13213)
│ ├─nginx(13214)
│ ├─nginx(13215)
│ ├─nginx(13216)
│ ├─nginx(13217)
│ ├─nginx(13219)
│ ├─nginx(13220)
│ └─nginx(13221)
# ps aux | grep nginx
root 13212 0.0 0.0 50144 1376 ? Ss Mar30 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 13213 0.5 0.3 61812 15056 ? S< Mar30 43:15 nginx:
worker process
nginx 13214 0.5 0.3 62028 15336 ? S< Mar30 42:12 nginx:
worker process
nginx 13215 0.5 0.3 61796 15040 ? S< Mar30 41:27 nginx:
worker process
nginx 13216 0.5 0.3 61776 15028 ? S< Mar30 41:44 nginx:
worker process
nginx 13217 0.5 0.3 61880 15088 ? S< Mar30 44:11 nginx:
worker process
nginx 13219 0.9 0.3 63048 16268 ? S< Mar30 75:42 nginx:
worker process
nginx 13220 0.6 0.3 62284 15504 ? S< Mar30 53:42 nginx:
worker process
nginx 13221 1.0 0.3 62848 16196 ? S< Mar30 86:39 nginx:
worker process
Нашел, причина глюка в том, что:
# echo $(readlink /proc/13212/exe | sed -e 's/\s*(deleted)$//')
(deleted)/usr/sbin/nginx
это фрагмент из функции __pids_var_run() из /etc/init.d/functions
sed ожидает что текст (deleted) будет после имени бинарника,
но тут текст (deleted) оказывается перед именем бинарника
и вся логика работы функции __pids_var_run() ломается.
if [ -n "$binary" ] ; then
local b=$(readlink /proc/$p/exe | sed -e 's/\s*(deleted)$//')
[ "$b" != "$binary" ] && continue
fi
pid="$pid $p"
(deleted)/usr/sbin/nginx не равно /usr/sbin/nginx
и поэтому __pids_var_run() думает что процесса нет.
Получается, что ошибка в файле /etc/rc.d/init.d/functions
из базового пакета initscripts-9.03.53-1.el6.centos.2.x86_64
из состава CentOS 6 / RHEL6 ?
Или же этот глюк специфичен только для OpenVZ версии ядра,
и на нормальном ядре из состава CentOS 6 все нормально?
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru