我需要为了两个应用程序之间的通信运行在服务器的Java罐子。 我已经写了两个shell脚本来运行它,但一旦我启动该脚本我不能关闭/终止进程。 如果我按Ctrl + C或关闭控制台,服务器将关闭。 谁能帮助我如何修改这个脚本作为一个正常的服务器上运行?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
我需要为了两个应用程序之间的通信运行在服务器的Java罐子。 我已经写了两个shell脚本来运行它,但一旦我启动该脚本我不能关闭/终止进程。 如果我按Ctrl + C或关闭控制台,服务器将关闭。 谁能帮助我如何修改这个脚本作为一个正常的服务器上运行?
#!/bin/sh
java -jar /web/server.jar
echo $!
#> startupApp.pid
你可以试试这个:
#!/bin/sh
nohup java -jar /web/server.jar &
&符号,切换程序在后台运行。
nohup这个工具使得在你登出即使在后台运行的参数传递的命令。
如果您在使用Ubuntu和有“暴发户”(http://upstart.ubuntu.com/).you可以试试这个:
创建/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
和service yourservice stop
命令。 您可以尾巴/var/log/yourservice.log
,以验证它的工作。
如果你只是想没有它占用的控制台窗口从控制台运行你的罐子,你可以这样做:
java -jar /web/server.jar > /var/log/yourservice.log 2>&1
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