Исполняемый JAR-файл Spring Boot не может открыть привилегированный порт как службу systemd

Я хотел бы запустить мое приложение Spring Boot как службу systemd, непосредственно прослушивающую порт 443 (а не за nginx / httpd). Для этого я указываю AmbientCapabilities=CAP_NET_BIND_SERVICE в служебном модуле systemd следующим образом:

[Service]
User=myapp
ExecStart=/usr/lib/myapp.jar
SucessExitStatus=143
AmbientCapabilities=CAP_NET_BIND_SERVICE

Однако кажется, что эта возможность теряется, когда встроенный скрипт запуска запускает Java. В качестве теста я заменил свой собственный однострочный сценарий bash java -jar /usr/lib/myapp.jar, чтобы проверить, не теряется ли возможность при запуске любого сценария bash, но это сработало. Итак, насколько я могу судить, что-то во встроенном скрипте запуска вызывает проблему.

С учетом сказанного, я, скорее всего, откажусь от встроенного сценария запуска в пользу запуска Java непосредственно из служебного модуля systemd, но в случае (1) у других есть такая же проблема или (2) это настоящая ошибка и не только мне что-то не хватает, я хотел хотя бы задать вопрос.

Ваше здоровье!

извините, если мое предположение глупо, но это то, что я вижу: внешние возможности должны быть установлены для исполняемого двоичного файла (я нашел его здесь). Если я правильно понимаю, двоичный файл в этом случае / usr / bin / java или всякий раз, когда установлен java. Так что вам стоит попробовать что-то вроде того. но вы устанавливаете его на myapp.jar

Dmitry Senkovich 24.04.2018 21:13

Вообще говоря, да, но в случае служебного модуля systemd возможность передается дочерним (и внучатым) процессам. Показательный пример: когда я заменил свой собственный сценарий bash, который затем запускал java, он сработал.

Dagan Henderson 24.04.2018 21:56

попробуйте выполнить ExecStart = java -jar /usr/lib/myapp.jar (точно так же, как вы это делали вручную). Теперь у вас есть ExecStart = / usr / lib / myapp.jar, это что-то другое.

Bartosz Bilicki 24.04.2018 22:21

@BartoszBilicki Извините за нечеткое указание, конечно, это работает. И, как я уже сказал, я, вероятно, просто воспользуюсь этим подходом. Меня просто бросило, потому что Документация по Spring Boot для systemd говорит использовать встроенный скрипт запуска.

Dagan Henderson 25.04.2018 02:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
4
212
0

Другие вопросы по теме