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