我需要在服务器中运行一个 java jar 以便在两个应用程序之间进行通信。我编写了两个 shell 脚本来运行它,但是一旦启动该脚本,我就无法关闭/终止该进程。如果我按ctrl+C或关闭控制台,服务器将关闭。谁能帮我修改这个脚本以作为普通服务器运行?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
我需要在服务器中运行一个 java jar 以便在两个应用程序之间进行通信。我编写了两个 shell 脚本来运行它,但是一旦启动该脚本,我就无法关闭/终止该进程。如果我按ctrl+C或关闭控制台,服务器将关闭。谁能帮我修改这个脚本以作为普通服务器运行?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
你可以试试这个:
#!/bin/sh
nohup java -jar /web/server.jar &
& 符号,切换程序在后台运行。
nohup 实用程序使作为参数传递的命令即使在您注销后也会在后台运行。
现在在大多数发行版中运行的Systemd
找到我的用户定义服务/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
如果你使用的是 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
andservice yourservice stop
命令。你可以tail/var/log/yourservice.log
来验证它是否正常工作。
如果你只是想从控制台运行你的 jar 而不占用控制台窗口,你可以这样做:
java -jar /web/server.jar > /var/log/yourservice.log 2>&1
在后台运行并使用以下命令将日志添加到日志文件:
nohup java -jar /web/server.jar > log.log 2>&1 &