在Linux中作为服务运行jar文件 - init.d脚本无法启动应用程序。

5
我目前正在实现在Linux VM服务器上将可运行的jar文件作为后台服务。我使用这里找到的示例作为基础,并将start()方法修改为以下内容:

start() {

# 启动应用程序

java -jar /home/vagrant/sagepay-stub-1.4.jar >/var/log/sagepay-stub.log 2>&1

PID=$!

echo $PID > pid.txt

}

这将设置服务将输出写入日志文件sagepay-stub.log并保存PID以便在调用服务停止方法时使用。
这是start命令的处理程序:

case "$1" in start)

echo "Starting $APP"
start
echo "$APP started."
;;
当我调用这个方法时,我可以看到"Sagepay-stub"的开始输出,但是我被卡在了脚本中。我能做的只有使用Ctrl + C退出,然后会得到如下输出:"Sagepay-stub started."。
现在我查看日志并发现输出与预期相符 - stub服务器已经成功启动。但是我无法在端口上进行wget请求(我已经使用iptables打开了相关端口),连接被拒绝。
Connecting to localhost|127.0.0.1|:8889... failed: Connection refused.

欢迎提出任何与问题相关的想法。我认为问题在于启动应用程序,然后转向并让其在后台运行。脚本在等待某些内容时被卡住了,而应用程序则已经开始运行。该JAR文件在没有输入的情况下本地运行良好。

如果问题出现在PID命令中(我在另一个线程上找到它作为被接受的答案),那么我该如何将其注释掉,同时仍然能够停止该服务?

对代码的评论也是受欢迎的。

谢谢!

1个回答

5

在“java -jar [应用程序]”这一行之后,您是否忘记了一个“&”,以便执行在该行之后继续进行。

这与在控制台中运行命令完全相同。在此之后添加“&”可确保在应用程序启动后仍可使用控制台。

这就是为什么当您按下ctrl-c时它会打印“Sagepay-stub started。”,因为那是您杀死Java进程并且bash脚本继续的时候。


哇,很好很简单,是我最喜欢的;)非常感谢! - a.hrdie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接