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

时间:2012-08-24 01:49:01

标签: shell unix executable-jar

我需要在服务器中运行java jar才能在两个应用程序之间进行通信。我编写了两个shell脚本来运行它,但是一旦我启动该脚本,我就无法关闭/终止该过程。如果我按 ctrl + C 或关闭控制台,服务器将关闭。任何人都可以帮我修改这个脚本以作为普通服务器运行吗?

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

4 个答案:

答案 0 :(得分:185)

你可以试试这个:

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

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

nohup实用程序使得作为参数传递的命令即使在您注销后也会在后台运行。

答案 1 :(得分:27)

如果你正在使用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 startservice yourservice stop命令。您可以拖尾/var/log/yourservice.log来验证它是否正常工作。

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

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

答案 2 :(得分:22)

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

答案 3 :(得分:5)

在后台运行,并使用以下命令将日志添加到日志文件:

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