2012-03-07 201 views
1

现状:启动Java jar文件

我有服务器PC上的jar文件(PC充当服务器),a.jar文件,这将运行无限循环来监听TCPIP连接从客户端PC。当连接已经完成,客户端PC可以发送一个压缩文件到服务器PCa.jar文件将其解压缩并与压缩,这将再掀全屏幕显示的java文件,b执行脚本。罐子

a.jar文件也将试图在启动过程中运行b.jar,如果b.jar已经存在。


方法1:

/etc/init.d/中写了一个脚本来启动a.jar文件,因为它是无限循环,系统在启动过程中永远挂( 在终端屏幕上,甚至不能进入GUI)。我必须启动到单用户模式以删除该脚本才能正常启动。


方法2:

当我改变了脚本a.jar文件运行作为一个守护进程,它运行正常,监听连接,我可以连接到服务器PC和发送zip文件。

问题:

  1. b.jar当执行权限和文件都正确设置甚至没有执行。
  2. 我发送一个zip文件后,b.jar被执行(,因为它连接到一个设备,该设备被激活)。但是全屏显示不像通过终端执行时那样显示。

这样

它可能的原因似乎有点复杂,但因为b.jar将不断更新,它必须是自动启动时更新后,因此我使用a.jar来解压并执行新版本fo b.jar

and b.jar需要以root身份运行,因为它需要访问串口。

(需要实现自动化服务器PC,因此需要启动时启动b.jar和远程控制


问题

我可以知道的是有没有更好的方法来做到这一点?或者我做错了什么?有人能给我看一个更好的脚本来启动它在启动过程中吗?

回答

1

方法1应该可以工作,但您必须在后台运行java进程,方法是在命令中添加&

但是,有更好的解决方案来作为deamon运行java应用程序。以上可以被认为是一个快速修复。

3

我认为,如果你想要运行的应用程序作为一个守护进程,最好的解决办法是使用Apache Jsvc

的jsvc是制作一组库和应用程序的Java 应用UNIX上更轻松地运行。 Jsvc允许应用程序 (例如Tomcat)以root身份执行某些特许操作(例如将 绑定到端口< 1024),然后将标识切换到非特权用户。 它可以通过Cygwin仿真层在Win32上运行,但是Win32 用户可能更喜欢使用procrun,它允许应用程序 作为Windows服务运行。