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

Ber*_*Ali 94 unix shell executable-jar

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

 #!/bin/sh
java -jar /web/server.jar
echo $! 
#> startupApp.pid
Run Code Online (Sandbox Code Playgroud)

Ant*_*zov 209

你可以试试这个:

#!/bin/sh
nohup java -jar /web/server.jar &
Run Code Online (Sandbox Code Playgroud)

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

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

  • 简答:这取决于服务器.答案很长:据我所知,如果没有支持如此优雅关闭的流程,就没有安全的方法可以关闭流程.例如,如果它是由外部信号终止的Web服务器,则总有可能丢失某些请求.解决此问题的一种方法是在服务器本身中实现优雅的终止功能,例如通过处理特殊类型的请求.然后,可以通过向服务器发送该特殊类型的请求来终止服务器.否则,通过其ID杀死进程是一种简单的方法. (3认同)

mte*_*sha 29

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
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)

  • 在aws ubutnu映像上,我必须安装systemd,然后在/ etc / systemd / system /中找到该映像 (3认同)

Str*_*lok 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  
Run Code Online (Sandbox Code Playgroud)

现在您可以发出service yourservice startservice yourservice stop命令.您可以尾随/var/log/yourservice.log验证它是否正常工作.

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

java -jar /web/server.jar > /var/log/yourservice.log 2>&1
Run Code Online (Sandbox Code Playgroud)

  • 那是一个系统服务吗?这个问题没有标记为linux,默认情况下很少有发行版有systemd. (2认同)

Kay*_*ayV 14

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

nohup java -jar /web/server.jar > log.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)