在服务器上运行 java jar 文件作为后台进程

为了在两个应用程序之间进行通信,我需要在服务器中运行一个 java jar。我已经编写了两个 shell 脚本来运行它,但是一旦启动该脚本,我就不能关闭/终止该进程。如果我按 ctrl + C或关闭控制台,服务器将关闭。有人能帮助我如何修改这个脚本,作为一个正常的服务器运行?

 #!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
258851 次浏览

If you're using Ubuntu and have "Upstart" (http://upstart.ubuntu.com/) you can try this:

创建 /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 startservice yourservice stop命令。

如果您只想从控制台运行 jar,而不想它占用控制台窗口,那么您可以这样做:

java -jar /web/server.jar > /var/log/yourservice.log 2>&1

你可以试试这个:

#!/bin/sh
nohup java -jar /web/server.jar &

& 符号,将程序切换到在后台运行。

Nohup 实用程序使得作为参数传递的命令在后台运行,即使在注销之后也是如此。

Systemd 现在运行在大多数发行版中

第一步:

Find your user defined services mine was at /usr/lib/systemd/system/

第二步:

用您喜欢的文本编辑器创建一个文本文件,将其命名为 whatever_you_want.service

第三步:

跟上 模板 到文件 whatever_you_want.service

[Unit]
Description=webserver Daemon


[Service]
ExecStart=/usr/bin/java -jar /web/server.jar
User=user


[Install]
WantedBy=multi-user.target

第四步:

运行你的服务
作为超级用户

$ 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

在后台运行并使用以下方法将日志添加到日志文件:

nohup java -jar /web/server.jar > log.log 2>&1 &