У меня есть Java-приложение, для запуска использую
java -jar myapp.jar
Чтобы остановить это, я использую CTRL + C.
Теперь мне нужно преобразовать это приложение во что-то, с чего я могу начать:
/etc/init.d/myapp start
И я могу остановиться на:
/etc/init.d/myapp stop
Проблема в том, чтобы сохранить PID процесса, кажется, я где-то видел рецепт для этого, не помню где и не могу его найти.
Я видел, что есть проект под названием Оболочка Java-сервера, но ищу что-нибудь бесплатное, не ограничивающее использование памяти. И я думаю, что эту работу можно выполнить с помощью одного сценария bash.
@alex, Может я не правильно понял эту страницу wrapper.tanukisoftware.org/doc/english/…
Андреа: Sun JVM всегда имеет некоторый лимит памяти. Если явно не задавать, это 64м. Поскольку 64 м - это немного, обычно вы всегда хотите изменить это значение самостоятельно. Кажется, что Java Service Wrapper может установить этот предел, используя процент, а не только абсолютное значение, как это обычно бывает.




Взгляните на Демон 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, но я надеюсь, что это поможет :)
Что вы имеете в виду под «не ограничивает использование памяти»? Использование памяти Sun JVM всегда ограничено (если вы не укажете -Xmx, является будет значением по умолчанию).