在Linux中启动期间启动Java jar文件

时间:2012-03-07 07:04:49

标签: java linux startup

情况:

我在服务器PC (PC充当服务器), a.jar 上有jar文件,它将运行无限循环以侦听来自的TCPIP连接客户端PC 。建立连接后,客户端PC 可以将zip文件发送到服务器PC a.jar 将解压缩并执行脚本zip,将启动另一个全屏显示java文件, b.jar

如果 b.jar 已经存在,

a.jar 也会尝试在启动期间运行 b.jar


方法1:

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


方法2:

当我更改脚本以运行 a.jar 作为守护程序时,它运行正常,侦听连接,我可以连接到服务器pc 并发送zip文件。

问题:

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

  3. 这样做的原因

    这可能看起来有点复杂,但因为 b.jar 会不断更新,并且必须在更新后自动启动,因此我使用 a.jar 解压缩并执行 b.jar 的新版本。

    b.jar 需要以root身份运行才能访问串口。

    Server pc需要自动化,因此需要在启动期间启动 b.jar 并远程控制


    问题

    我知道有没有更好的方法呢?或者我做错了什么?有人能给我看一个更好的脚本来启动它吗?

2 个答案:

答案 0 :(得分:3)

我认为如果你想将应用程序作为守护进程运行,最好的解决方案就是使用Apache Jsvc

  

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

答案 1 :(得分:1)

方法1应该可以工作,但是必须通过向命令添加&来在后台运行java进程。

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