Запустить java файл jar на сервере в качестве фонового процесса
Мне нужно запустить java-банку на сервере, чтобы общаться между двумя приложениями. Я написал два сценария оболочки, чтобы запустить его, но как только я запускаю этот script, я не могу завершить/завершить процесс. Если я нажму ctrl + C или закрою консоль, сервер отключится. Может ли кто-нибудь помочь мне изменить этот script для запуска как обычный сервер?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
Ответы
Ответ 1
Вы можете попробовать следующее:
#!/bin/sh
nohup java -jar /web/server.jar &
Символ и, переключает программу для запуска в фоновом режиме.
Утилита nohup делает команду переданной как аргумент, выполняемый в фоновом режиме даже после выхода из системы.
Ответ 2
Если вы используете Ubuntu и имеете "Upstart" (http://upstart.ubuntu.com/).вы можете попробовать следующее:
Создать /var/init/yourservice.conf
со следующим содержанием
description "Your Java Service"
author "You"
start on runlevel [3]
stop on shutdown
expect fork
script
cd /web
java -jar server.jar >/var/log/yourservice.log 2>&1
emit yourservice_running
end script
Теперь вы можете выдать команды service yourservice start
и service yourservice stop
. Вы можете закрепить /var/log/yourservice.log
, чтобы убедиться, что он работает.
Если вы просто хотите запустить свою банку с консоли, не запуская консольное окно, вы можете просто сделать:
java -jar /web/server.jar > /var/log/yourservice.log 2>&1
Ответ 3
Systemd, который теперь выполняется в большинстве дистрибутивов
Шаг 1:
Найдите свои сервисы, определенные пользователем, мой был в /usr/lib/systemd/system/
Шаг 2:
Создайте текстовый файл с именем вашего любимого текстового редактора whatever_you_want.service
Шаг 3:
Поставить следующий
Шаблон в файл whatever_you_want.service
[Unit]
Description=webserver Daemon
[Service]
ExecStart=/usr/bin/java -jar /web/server.jar
User=user
[Install]
WantedBy=multi-user.target
Шаг 4:
Запустите службу
как суперпользователь
$ systemctl start whatever_you_want.service # starts the service
$ systemctl enable whatever_you_want.service # auto starts the service
$ systemctl disable whatever_you_want.service # stops autostart
$ systemctl stop whatever_you_want.service # stops the service
$ systemctl restart whatever_you_want.service # restarts the service