Java работает как служба Unix

Я создал небольшой демон на Java, и я хотел бы запустить его как службу под Unix (например, Debian 5). Я читал, что есть возможность использовать оболочку Java, но нет ли другого варианта, который проще реализовать? Разве я не могу просто использовать команду Unix, например xxx java -jar program.jar?


person Vilius    schedule 13.10.2010    source источник
comment
commons.apache.org/daemon/jsvc.html   -  person jmj    schedule 13.10.2010
comment
Зайдите на serverfault.com/superuser.com. Система может знать об этом больше (nohup, inittabs, cron и т. Д.)   -  person Jayan    schedule 13.10.2010


Ответы (5)


Что ж, если вы хотите запускать свою java-программу, даже когда вы выходите из оболочки, самый простой способ:

$nohup java -jar program.jar &
person Chaitanya    schedule 13.10.2010
comment
рассмотрите возможность перенаправления stderr и stdout как части команды. например nohup java .... 1>/dev/null 2>&1 & - person JeremyP; 13.10.2010

Вам необходимо создать соответствующий сценарий в /etc/init.d и связать его с /etc/rcX.d каталогами. Сценарий должен поддерживать как минимум параметры start, stop и status. Во время запуска он должен выполнить команду java с соответствующими аргументами, возможно, через nohup java <arguments> &. Затем вы должны сохранить PID вашего только что запущенного процесса в файл /var/run/yourservice.pid. Команда stop должна прочитать этот файл PID и закрыть эту службу. Детали варьируются от дистрибутива к дистрибутиву, большинство дистрибутивов предоставляют некоторые макросы, чтобы упростить всю работу. Лучше всего посмотреть примеры других сервисов в /etc/init.d для вашего дистрибутива.

Дополнительно: если к вашей службе не обращаются с других компьютеров в сети, но она открывает какой-то порт, сделайте ее недоступной с помощью брандмауэра.

Если ваша служба обрабатывает некоторые «деликатные» данные, хорошо добавить еще одного пользователя и вызвать соответствующую команду sudo в вашем /etc/init.d файле.

person iirekm    schedule 13.10.2010
comment
В Debian есть готовый сценарий, который вы можете скопировать и адаптировать под свои нужды: /etc/init.d/skeleton - person barjak; 13.10.2010
comment
На компьютерах Linux есть служебная команда chkconfig, которая создает ссылки в /etc/rcX каталогах, проверяя комментарии специального формата в вашем сценарии. - person Raedwald; 27.11.2013

Вы можете запустить его как:

java -jar program.jar

Демоны Unix обычно запускаются с помощью init или запускаются сценарием в /etc/init.d или /etc/rc.d и запускаются на определенных уровнях выполнения - обычно с помощью программных ссылок в /etc/rcX.d. (где X - предполагаемый "уровень выполнения", который обычно равен 3.

Я думаю, что debian переходит к использованию "выскочки", замены init. Он использует файлы конфигурации в /etc/init для определения заданий, и их довольно легко написать. Проверь это.

Демоны традиционно закрывают stdin, sdtout и stderr и при запуске выполняют «двойную вилку», чтобы отсоединиться от сеанса, а также сигнализировать о том, что они готовы обрабатывать все, что им нужно обработать. На самом деле в этом нет необходимости, если демон не запускается с терминала.

Если вы хотите, чтобы ваша программа запускала простую оболочку-оболочку; вам просто нужно написать небольшой сценарий оболочки:

#!/bin/sh
/full/path/to/java -jar /full/path/to/program.jar

... и сделать его исполняемым (chmod 755)

person KarlP    schedule 13.10.2010


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

person Faisal Feroz    schedule 13.10.2010
comment
Это хорошо, если вы хотите периодически запускать программу. После этого программа должна завершиться. - person KarlP; 13.10.2010