Shell脚本调用运行java程序的非主要方法

时间:2016-04-06 10:27:12

标签: java bash shell

我开发了一个shell脚本,它调用java程序RHEL环境的main方法。

Shell脚本(比如app.sh)在tomcat.sh

行上有多个选项

start:它将通过调用main方法

启动一个java程序

stop:它将获得正在运行的进程ID并终止进程

我已经实现了startstop命令,并期待实现pause命令。

pause: 此选项应获取运行java应用程序的pid并调用非主方法

我没有问题来获取进程ID。 但是我可以从运行进程ID中调用java程序的非Main方法吗?

编辑:

How can I call a method in an object from outside the JVM?问题提供了不同技术的解决方案,但除了使用shell脚本之外,我无法转向不同的技术。

2 个答案:

答案 0 :(得分:2)

解决方案如下:

  1. 通常创建服务。
  2. 该服务通过JMX公开了许多方法,或者只是通过监听TCP / unix-domain套接字来获取一组有限的已知命令。
  3. 当需要控制时,服务是一个专用进程(可能是用Java编写的实用程序,与服务分开),通过指定的命令通道发出所需命令。
  4. SO question that I mentioned in the comments包含所有必要的技术细节。实际上所有的学分应该在那里,我只是重新安排他们的话。

    或者在类Unix系统中,包括Linux,您可以为给定的pid(kill -STOP <pid>)发送SIGSTOP信号,并且在收到SIGCONT(kill -CONT <pid>)之前,JVM将无条件地停止。但我认为这绝对是一个残酷的解决方案。可能你会失去所有打开的连接等。

答案 1 :(得分:1)

我找到了一个解决方案来摆脱她只调用程序主要方法的脚本的限制。

  1. 程序A的RMI URL保存在数据库或文件系统中。
  2. 程序B读取该RMI URL。
  3. 脚本调用的启动选项程序的主要方法A.脚本的暂停选项调用程序B的主要方法。
  4. 程序B调用程序A的远程方法。
  5. 另一个解决方案:调用一个jsp页面,该页面在暂停选项中使用脚本中的wget命令调用程序A上的远程方法。