Для запуска приложения Java в качестве службы в фоновом режиме на сервере Linux существует множество возможностей. Я мог бы использовать "Java Service Wrapper" от Tanuki или форк с открытым исходным кодом "Yet Another Java Service Wrapper" или что-то, о чем я еще не знаю. Я мог бы использовать Supervisor или даже Systemd.

У меня сложилось впечатление, что Java Wrappers не делают ничего, кроме как запускают приложение с установленными необходимыми параметрами (максимальный размер кучи, возможно classpath и тому подобное), контролируют его, перезапускают при необходимости или посылают приложению сигналы для перезагрузки, выключения или перезапустить. Вещи, которые я считаю легко выполнимыми с помощью Supervisor, а также даже с Systemd.

Я склонен думать, что эти оболочки были полезны, когда linux init все еще был основан на SystemV, но устарели с существованием supervisord или systemd. Есть ли какие-то моменты, которые мне не хватает на данный момент?

Есть ли преимущества у специальных java-оберток перед универсальными системами управления процессами типа супервизора или systemd?

1
karlsebal 31 Окт 2019 в 13:14
Что, если кто-то решит перенести вашу инфраструктуру на операционную систему, в которой нет systemd?
 – 
Federico klez Culloca
31 Окт 2019 в 13:20
На данный момент я просто думаю о системах Linux, поэтому переход на Windows исключен. Миграция на систему Linux, не работающую на systemd, вероятно, по крайней мере, предоставит супервизор.
 – 
karlsebal
31 Окт 2019 в 13:25

1 ответ

Я использовал Java Service Wrapper от Tanuki Software на прошлой работе, и это сработало для нас очень хорошо. В основном мы использовали его для управления сценариями, мониторинга JVM и триггерных перезапусков и дампов потоков. Вы можете ознакомиться с полным списком функций.

В современных приложениях они могут быть частично покрыты другими инструментами, такими как инструменты сборки/упаковки, которые могут генерировать сервисы и сценарии управления, сервисы агрегирования журналов и метрик, а также проверки работоспособности при автоматических перезапусках в механизмах контейнеров. Повышение отказоустойчивости приложения также может решить многие проблемы.

При этом я все еще думаю, что это может быть удобно, если у вас есть приложение, которое не обрабатывает сбои изящно и нуждается в перезапуске, когда оно попадает в забавное состояние.

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

2
steinybot 19 Окт 2020 в 12:16