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 mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить