情况:
我在服务器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文件。
问题:
这样做的原因
这可能看起来有点复杂,但因为 b.jar 会不断更新,并且必须在更新后自动启动,因此我使用 a.jar 解压缩并执行 b.jar 的新版本。
b.jar 需要以root身份运行才能访问串口。
( Server pc需要自动化,因此需要在启动期间启动 b.jar 并远程控制)
问题
我知道有没有更好的方法呢?或者我做错了什么?有人能给我看一个更好的脚本来启动它吗?
答案 0 :(得分:3)
我认为如果你想将应用程序作为守护进程运行,最好的解决方案就是使用Apache Jsvc:
Jsvc是一组用于制作Java的库和应用程序 应用程序在UNIX上运行更容易。 Jsvc允许应用程序 (例如Tomcat)以root身份执行某些特权操作(例如绑定 到一个港口< 1024),然后将身份切换到非特权用户。 它可以通过Cygwin仿真层在Win32上运行,但是Win32 用户可能更喜欢使用procrun,这允许应用程序 作为Windows服务运行。
答案 1 :(得分:1)
方法1应该可以工作,但是必须通过向命令添加&
来在后台运行java进程。
但是有更好的解决方案来运行java应用程序作为deamon。以上可以视为快速修复。