Я создал небольшой демон на Java, и я хотел бы запустить его как службу под Unix (например, Debian 5). Я читал, что есть возможность использовать оболочку Java, но нет ли другого варианта, который проще реализовать? Разве я не могу просто использовать команду Unix, например xxx java -jar program.jar
?
Java работает как служба Unix
Ответы (5)
Что ж, если вы хотите запускать свою java-программу, даже когда вы выходите из оболочки, самый простой способ:
$nohup java -jar program.jar &
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
файле.
/etc/init.d/skeleton
- person barjak; 13.10.2010
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)
Эта статья содержит несколько полезных приемов для запуска Java-приложения в качестве демона:
http://barelyenough.org/blog/2005/03/java-daemon/ а>
В качестве альтернативы вы можете взглянуть на проект Apache Commons Daemon, хотя для этого требуется собственный код (поддерживаются Unix и Win32):
http://commons.apache.org/daemon/
Вы можете использовать задание cron для планирования своей программы. Вы также можете ознакомиться с этой статьей, чтобы узнать, как запускать сценарии при запуске. Вы можете написать сценарий, который запускает вашу java-программу, и запускать ее при запуске, как указано в статье.