【问题标题】:Running jar as a Linux service - init.d script gets stuck starting app将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住了
【发布时间】:2013-10-15 09:57:49
【问题描述】:

我目前正致力于在 Linux 虚拟机上实现一个可运行的 jar 作为后台服务。我使用找到的示例 here 作为基础,并将 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 以供调用服务停止方法时使用。

这是启动命令的处理程序:

案例“$1”开始)

echo "Starting $APP"
start
echo "$APP started."
;;

当我调用该方法时,我得到“Starting Sagepay-stub”输出,但随后我被困在脚本中。我所能做的就是 Ctrl & C 退出,这给了我输出:

“Sagepay-stub 已启动。”

现在我查看日志并看到输出与预期一样 - 存根服务器已成功启动。但我无法在端口上获取(我已经使用 iptables 打开了相关端口) - 连接被拒绝:

Connecting to localhost|127.0.0.1|:8889... failed: Connection refused.

感谢您对问题所在的任何想法。我认为问题在于启动应用程序然后继续并让它在后台运行。脚本在应用程序启动时卡住等待某些东西。 jar 在本地运行良好,无需输入。

如果问题出在 PID 命令上(我在另一个线程上找到了已接受的答案),我该如何注释掉这些命令并仍然能够停止服务?

也欢迎评论代码

谢谢

【问题讨论】:

    标签: java linux service jar localhost


    【解决方案1】:

    你没有忘记'java -jar [application stuff]' 行之后的'&',以便在该行之后继续执行。

    这和你在控制台运行命令完全一样。 '&' 后确保控制台在应用程序启动后可用。

    这就是它打印“Sagepay-stub 已启动”的原因。一旦你点击 ctrl-c,因为那是你杀死 java 进程并且 bash 脚本继续的时候。

    【讨论】:

    • 哇,漂亮又简单,我的最爱;)非常感谢!
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多