作为服务启动时调出 Java 控制台

作为服务启动时调出 Java 控制台

我遇到了一个小问题。我在 Ubuntu 14.04 服务器上运行 Java 应用程序。有一次,我选择使用 Screen 和一些自定义监控脚本来保持应用程序运行。监控进程确保 Java 应用程序仍在运行,并在应用程序失败时重新启动它,而 Screen 则用于在我需要与应用程序 CLI 交互时轻松重新连接到 Java 应用程序控制台。长话短说,这在技术上是可行的,但不太稳定。有时 Screen 会停止工作,或者监控进程会失败。它们都有问题。我忍受这种配置好几年了。最后我决定走一条不同的路。

目前(大约在过去一年),该应用程序一直作为服务运行。我相信它正在使用 Upstart,因为当时 systemd 还没有在 14.04 LTS 上作为默认设置推出。这种新的流程控制方法就像梦想成真一样。通过将 Java 应用程序视为服务,可以非常轻松地启动和停止它。此外,当服务器启动或服务失败时,操作系统会完美地处理启动/重启。那么问题是什么?以这种方式启动应用程序时,我无法再访问 Java 控制台。使用此方法访问 Java 控制台的唯一方法是关闭服务,然后手动启动 Java 应用程序。与控制台交互以进行必要的更改。关闭应用程序,然后重新启动服务。您可以看到这不是一个好的解决方案。如果您永远不需要与控制台交互,那么此解决方案非常有效。

我尝试使用 Upstart 将屏幕内的 Java 应用程序作为服务启动,但这似乎不起作用。因此,这是官方问题:

如何使用 Upstart 启动 Java 应用程序,以便服务运行后,我可以通过 SSH 连接到服务器,并使用某些命令可以访问 JVM 控制台来发出 CLI 命令?

这是来自服务器的一些信息,包括 Upstart 脚本。

谢谢

root@ALPHA:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

root@ALPHA:~# uname -r
3.19.0-65-generic

root@ALPHA:~# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

# ALPHA START SCRIPT
start on runlevel [2345]
stop on runlevel [^2345]
console log
chdir /home/administrator/alpha
setuid administrator
setgid administrator
respawn
respawn limit 20 5
exec /usr/bin/java -Xms6G -Xmx12G -XX:PermSize=2G -jar alpha.jar nogui

相关内容