/usr/sbin/nginx alternatives

Hennadii Makhomed gmm на csdoc.com
Пн Сен 16 18:34:31 UTC 2024


On 16.09.2024 19:25, Konstantin Pavlov wrote:

>> а как Вам идея вместо двух unit-файлов nginx.service
>> и nginx-debug.service использовать только один unit-файл
>> nginx.service и использовать alternatives для переключения
>> бинарника /usr/sbin/nginx между release и debug версиями ?
> 
> Мы поддерживаем несколько разных ОС в наших пакетах на nginx.org (и еще 
> больше - для коммерческой версии), и не во всех них есть поддержка 
> alternatives.  По этой причине не хотелось бы это реализовывать для 
> какой-то одной конкретной ОС если нельзя сделать везде одинаково.

это можно сделать везде одинаково, на всех Linux/UNIX системах.

в пакет положить два бинарника:

/usr/sbin/nginx-release
/usr/sbin/nginx-debug

а потом симлинк /usr/sbin/nginx устанавливать
на один из этих бинарников внешним скриптом,
если такого симлинка нет - установить
его тогда на /usr/sbin/nginx-release

например, так:

NGINX_VERSION=debug /sbin/service nginx upgrade
NGINX_VERSION=release /sbin/service nginx upgrade

просто добавив скрипт
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
такую логику:

если переменная NGINX_VERSION равна debug то установить симлинк
/usr/sbin/nginx чтобы он указывал на на бинарник /usr/sbin/nginx-debug

если переменная NGINX_VERSION равна release то установить симлинк
/usr/sbin/nginx чтобы он указывал на на бинарник /usr/sbin/nginx-release

если переменная NGINX_VERSION не определена - не трогать симлинк.

если переменная NGINX_VERSION определена, но не равна release или debug
то в таком случае выдать сообщение про ошибку и аварийно завершить
работу скрипта с ненулевым кодом ошибки

переменную NGINX нельзя использовать, потому что

# man nginx

ENVIRONMENT
      The NGINX environment variable is used internally by nginx and 
should not be set directly by the user.

===============================================================

или так:

nginx upgrade to debug
nginx upgrade to release
nginx upgrade

причем, одинарные или двойные минусы перед словом "upgrade"
тут и не нужны, потому что это же и есть именно что команда

в таком стиле работает и zfs и systemctl и многие другие
команды современного Linux/UNIX например, тот же kubectl

если же переключение между release / debug версями происходит с помощью
двух отдельных сервисов nginx.service и nginx-debug.service, то в таком
случае переключение между ними происходит с потерей соединений клиентов

-- 
Best regards,
  Gena


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