Я создал небольшой демон в Java, и я хотел бы запустить его как службу под Unix (например, Debian 5). Я прочитал, что есть возможность использовать оболочку Java, но нет ли другого варианта, который проще реализовать? Не могу ли я использовать команду Unix, например xxx java -jar program.jar
?
Java работает как служба Unix
Ответ 1
Ну, если вы хотите запускать свою Java-программу, даже когда вы выходите из своей оболочки, это самый простой способ:
$nohup java -jar program.jar &
Ответ 2
Вам нужно создать соответствующий script в /etc/init.d
и связать его с каталогами /etc/rcX.d
. script должен поддерживать не менее start
, stop
и status
параметры. Во время запуска он должен запустить команду java
с соответствующими аргументами, возможно, через nohup java <arguments> &
. Затем вы должны сохранить PID вашего недавно начатого процесса в файл /var/run/yourservice.pid
. Команда stop
должна прочитать этот файл PID и убить эту службу.
Детали варьируются от распределения к распределению, большинство дистрибутивов предоставляют некоторые макросы, чтобы облегчить всю работу. Лучше всего посмотреть на примеры других сервисов в /etc/init.d
для вашего распространения.
Дополнительно: Если ваша служба не доступна с других компьютеров в сети, но она открывает какой-то порт, сделайте его недоступным с помощью брандмауэра.
Если ваша служба обрабатывает некоторые "деликатные" данные, полезно добавить другого пользователя и вызвать соответствующую команду sudo
в вашем файле /etc/init.d
.
Ответ 3
Вы можете запустить его как:
java -jar program.jar
Демоны Unix обычно запускаются с помощью init или запускаются с помощью script в /etc/init.d
или /etc/rc.d
и запускаются на определенных уровнях выполнения - обычно софт-ссылками в /etc/rcX.d
. (где X - предполагаемый "уровень запуска", который обычно равен 3.
Я думаю, что debian переходят к использованию "upstart", init-replacement. Он использует конфигурационные файлы в /etc/init
для определения заданий, и их довольно легко написать. Проверьте это.
Daemons традиционно закрывает stdin, sdtout и stderr, а при запуске выполняет "двойную вилку", чтобы отсоединиться от сеанса, а также сообщить, что они готовы обрабатывать все, что им нужно. Это не обязательно, если демон не запускается с терминала.
Если вы хотите, чтобы простая оболочечная оболочка запускала вашу программу; вам просто нужно написать небольшую оболочку script:
#!/bin/sh
/full/path/to/java -jar /full/path/to/program.jar
... и сделать его исполняемым (chmod 755)
Ответ 4
В этой статье содержится несколько полезных трюков для запуска приложения Java в качестве демона:
http://barelyenough.org/blog/2005/03/java-daemon/
В качестве альтернативы вы можете посмотреть проект Apache Commons Daemon, хотя для этого требуется собственный код (поддерживаемые Unix и Win32):
Ответ 5
Вы можете использовать задание cron для планирования вашей программы. Вы также можете просмотреть эту статью для получения подробных сведений о том, как запускать скрипты при запуске. Вы можете написать script, который запускает вашу java-программу и запускает ее при запуске, как указано в статье.