我遇到了一个小问题。我在 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