Re: Подмена бинарника в докере

Anton Bessonov exelib на gmail.com
Пн Апр 25 19:55:27 UTC 2016


Так и есть, ppid становится 1:

# ps axw -o pid,ppid,user,%cpu,vsz,wchan,command
   PID  PPID USER     %CPU    VSZ WCHAN  COMMAND
     1     0 root      0.2  20044 pipe_w /bin/bash -c $(exec 
/usr/sbin/nginx -g "daemon off;")
     5     1 root      0.0  31684 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
     6     5 nginx     0.0  32068 -      nginx: worker process
     7     0 root      0.6  20224 wait   bash
    11     7 root      0.0  17500 -      ps axw -o 
pid,ppid,user,%cpu,vsz,wchan,command

# kill -USR2 5
# ps axw -o pid,ppid,user,%cpu,vsz,wchan,command
   PID  PPID USER     %CPU    VSZ WCHAN  COMMAND
     1     0 root      0.0  20044 pipe_w /bin/bash -c $(exec 
/usr/sbin/nginx -g "daemon off;")
     5     1 root      0.0  31684 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
     6     5 nginx     0.0  32068 -      nginx: worker process
     7     0 root      0.0  20224 wait   bash
    12     5 root      0.0  31688 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
    13    12 nginx     0.0  32068 -      nginx: worker process
    14     7 root      0.0  17500 -      ps axw -o 
pid,ppid,user,%cpu,vsz,wchan,command

# kill -WINCH 5
# ps axw -o pid,ppid,user,%cpu,vsz,wchan,command
   PID  PPID USER     %CPU    VSZ WCHAN  COMMAND
     1     0 root      0.0  20044 pipe_w /bin/bash -c $(exec 
/usr/sbin/nginx -g "daemon off;")
     5     1 root      0.0  31684 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
     6     5 nginx     0.0  32068 -      nginx: worker process
     7     0 root      0.0  20224 wait   bash
    12     5 root      0.0  31688 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
    13    12 nginx     0.0  32068 -      nginx: worker process
    15     7 root      0.0  17500 -      ps axw -o 
pid,ppid,user,%cpu,vsz,wchan,command

# kill -QUIT 5
# ps axw -o pid,ppid,user,%cpu,vsz,wchan,command
   PID  PPID USER     %CPU    VSZ WCHAN  COMMAND
     1     0 root      0.0  20044 pipe_w /bin/bash -c $(exec 
/usr/sbin/nginx -g "daemon off;")
     7     0 root      0.0  20224 wait   bash
    12     1 root      0.0  31688 sigsus nginx: master process 
/usr/sbin/nginx -g daemon off;
    13    12 nginx     0.0  32068 -      nginx: worker process
    16     7 root      0.0  17500 -      ps axw -o 
pid,ppid,user,%cpu,vsz,wchan,command

On 25.04.2016 21:08, Igor Sysoev wrote:
> On 25 Apr 2016, at 20:33, Anton Bessonov <exelib at gmail.com> wrote:
>
>> Здравстуйте,
>>
>> на сколько я помню, то энджин не посзоляет обновлять конфигурацию, если менять параметры некоторых директив, таких как пути к кэшам. Актуально использую подмену бинарника - вроде помогает.
>>
>> Сейчас эксперементирую с тем же самым, только в контейнере. По умолчанию энджин имеет PID 1, что убивает контейнер после kill -QUIT 1.
>>
>> В docker-compose делаю следующее:
>>
>> version: '2'
>> services:
>>   nginxt:
>>     image: nginx
>>     ports:
>>       - "6283:80"
>>     command: /bin/bash -c '$$(exec /usr/sbin/nginx -g "daemon off;")'
>>
>> Вроде работает:
>>
>> # ps auxf
>> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>> root         7  0.1  0.3  20224  3208 ?        Ss   17:07   0:00 bash
>> root        12  0.0  0.2  17496  2064 ?        R+   17:07   0:00  \_ ps auxf
>> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
>> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
>>
>> # kill -USR2 5
>> # ps auxf
>> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
>> root        15  0.0  0.2  17496  2048 ?        R+   17:08   0:00  \_ ps auxf
>> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
>> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
>> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00  \_ nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx       14  0.0  0.2  32068  2880 ?        S    17:08 0:00      \_ nginx: worker process
>>
>> # kill -WINCH 5
>> # ps auxf
>> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
>> root        16  0.0  0.1  17496  1956 ?        R+   17:09   0:00  \_ ps auxf
>> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
>> root         5  0.0  0.4  31684  4860 ?        S    17:06   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx        6  0.0  0.2  32068  2860 ?        S    17:06   0:00  \_ nginx: worker process
>> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00  \_ nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx       14  0.0  0.2  32068  2880 ?        S    17:08 0:00      \_ nginx: worker process
>>
>> # kill -QUIT 5
>> # ps auxf
>> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>> root         7  0.0  0.3  20224  3208 ?        Ss   17:07   0:00 bash
>> root        17  0.0  0.2  17496  2064 ?        R+   17:09   0:00  \_ ps auxf
>> root         1  0.0  0.2  20044  2704 ?        Ss   17:06   0:00 /bin/bash -c $(exec /usr/sbin/nginx -g "daemon off;")
>> root        13  0.0  0.4  31688  5080 ?        S    17:08   0:00 nginx: master process /usr/sbin/nginx -g daemon off;
>> nginx       14  0.0  0.2  32068  2880 ?        S    17:08   0:00  \_ nginx: worker process
>>
>>
>> Теперь вопросы.
>>
>> А оно работает? То есть какие проблемы могут возникнуть из-за такого изврашённого способа? Или есть способ лучше? (Ну в голову пришло ещё просто стартовать новый контейнер, подменивать днс и выкидывать старый... но я в этом не сильно шарю - как там ttl и всё такое, если нужно срочно).
> А что показывает
> ps axw -o pid,ppid,user,%cpu,vsz,wchan,command
>
> В апгрэйде самое главное, чтобы ppid у мастер-процеса был 1.
>
>> И ещё вопрос: А после -WINCH воркеры не должны вымирать?
> Должны. Но при автоматическом апгрэйде достаточно USR2/QUIT.
>
>



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