如何在Ubuntu Linux启动时运行Java应用程序

4

我有一个项目需求,需要开发一个读取TCP/IP Socket的应用程序。我已经成功地将程序制作为Java程序,没有图形用户界面,意味着一旦程序运行,它就开始监听Socket,并借助Netbeans IDE获取响应。现在根据我的需求,我必须在Linux系统启动时立即开始执行此程序。

实际上,我对Java和Linux平台都很陌生,所以有几个疑问..

  1. 我没有图形用户界面的Socket程序是否适合按照我的要求运行。
  2. 如何编写脚本在Linux引导时运行jar包,我得知 init.d 就是用于此目的。

/etc/rc.local 是在系统启动时运行代码的懒惰之地。 - Paul
@Paul - 很好的你提供了另一种选择。 - Will
2个回答

8
理想情况下,您应该为您的Java应用程序创建一个服务包装器,并使此服务在启动时运行。这里提供了示例
在Ubuntu上,使用sudo update-rc.d mytestserv defaults命令来使您的服务包装器在启动时运行。

如果我不改变程序中的PID_PATH_NAME=/tmp/MyService-pid,会怎样呢?如果我让它保持原样,会有问题吗? - Ram
还有一个愚蠢的问题。很抱歉,先生,我对Linux非常陌生...在粘贴脚本并执行下一个命令sudo chmod +x /etc/init.d/mytestserv之后,如何退出此命令sudo vi /etc/init.d/mytestserv? - Ram
1
你是指退出vi编辑器吗?按“ESC + :wq + INTRO”退出。如果你想重启机器,尝试使用“sudo reboot now”或“sudo reboot”。 - PbxMan
明白了,先生。还有一件事,如果我的服务处于启动模式,并且过了一段时间后我重新启动了Linux系统,那么我的服务会自动启动。我是对的吗? - Ram
如果可以的话,请重新启动您的计算机以进行双重检查。祝好运! - PbxMan

2
所以你需要做两件事情:
首先创建一个小的 shell 脚本,从终端启动你的 Java 程序。由于你已经打包成了 jar 文件,请查看 this,特别是“JAR Files as Applications”部分。
这可能已经足够了:(尽管你会想要使用完整的 Java 路径)
#!/bin/bash
java -jar path_to_jar_file

你应该能够运行你的脚本并成功启动程序。
一旦你已经从脚本开始它,你可以使用标准的Linux工具来启动脚本。可以将其放在 /etc/rc.local 中,或者像你正在使用Ubuntu一样,使用 update-rc.d 在启动时启动它。参见 here 以获取使用 update-rc.d 的非常简单的示例。
希望这有所帮助,
Will

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