Как преобразовать существующее приложение Java в службу SYS V (демон)

У меня есть Java-приложение, для запуска использую

java -jar myapp.jar

Чтобы остановить это, я использую CTRL + C.

Теперь мне нужно преобразовать это приложение во что-то, с чего я могу начать:

/etc/init.d/myapp start

И я могу остановиться на:

/etc/init.d/myapp stop

Проблема в том, чтобы сохранить PID процесса, кажется, я где-то видел рецепт для этого, не помню где и не могу его найти.

Я видел, что есть проект под названием Оболочка Java-сервера, но ищу что-нибудь бесплатное, не ограничивающее использование памяти. И я думаю, что эту работу можно выполнить с помощью одного сценария bash.

Что вы имеете в виду под «не ограничивает использование памяти»? Использование памяти Sun JVM всегда ограничено (если вы не укажете -Xmx, является будет значением по умолчанию).

alex 02.01.2009 21:38

@alex, Может я не правильно понял эту страницу wrapper.tanukisoftware.org/doc/english/…

Andrea Francia 04.01.2009 01:26

Андреа: Sun JVM всегда имеет некоторый лимит памяти. Если явно не задавать, это 64м. Поскольку 64 м - это немного, обычно вы всегда хотите изменить это значение самостоятельно. Кажется, что Java Service Wrapper может установить этот предел, используя процент, а не только абсолютное значение, как это обычно бывает.

Peter Štibraný 04.01.2009 13:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
3
6 010
2

Ответы 2

Взгляните на Демон Apache Commons.

Он имеет программу запуска jsvc, которая поддерживает запуск и остановку демонов (служб) на основе Java.

Во-первых, сохранение PID на * nix:

$ ./yourprogram &
$ echo $! > /var/run/yourpid

yourpid теперь будет содержать PID вашей программы, и / var / run - подходящее место для его размещения.

Вышеупомянутое можно поместить в ваш "стартовый" скрипт. Сценарий "stop" может посмотреть на ваш pid, чтобы узнать, что убить.

Если вы хотите быть более элегантным и правильно остановить приложение, вы можете посмотреть исходный код Tomcat org.apache.catalina.startup.Catalina.java, чтобы узнать, как реализовать правильные перехватчики завершения работы.

Во-вторых, приведенные выше сценарии остановки и запуска можно поместить в /etc/init.d/mystopstartscript:

#!/bin/bash
# processname: yourprogram
# pidfile: /var/run/yourpid

case $1 in
start)
        sh /some/where/start.sh
        ;;
stop)  
        sh /some/where/stop.sh
        ;;
restart)
        sh /some/where/stop.sh
        sh /some/where/start.sh
        ;;
esac   
exit 0

Это довольно самодельное решение, идеи которого в основном взяты из старого доброго Tomcat, но я надеюсь, что это поможет :)

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