118

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

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

4 回答 4

283

你可以试试这个:

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

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

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

于 2012-08-24T11:34:45.553 回答
63

现在在大多数发行版中运行的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
于 2015-02-24T19:16:07.910 回答
33

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

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

java -jar /web/server.jar > /var/log/yourservice.log 2>&1
于 2012-08-24T02:41:22.980 回答
16

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

nohup java -jar /web/server.jar > log.log 2>&1 &
于 2020-06-18T05:29:32.603 回答