【问题标题】:Shell script calling non-main method of running java programShell脚本调用运行java程序的非main方法
【发布时间】:2016-04-06 10:27:12
【问题描述】:

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

Shell 脚本(比如app.sh)在tomcat.sh 的行上有多个选项

start:会调用main方法启动一个java程序

stop:它会获取正在运行的进程id并杀死进程

我已经实现了startstop 命令,期待实现暂停命令。

pause: 这个选项应该获取运行java应用程序的pid并调用非Main方法

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

编辑:

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

【问题讨论】:

  • 我认为你不能这样做。检查this了解更多信息。
  • 我已经检查了那个问题。但我希望调用现有进程的非主方法,而不是调用新进程的新主方法

标签: java bash shell


【解决方案1】:

解决方案如下:

  1. 照常创建服务。
  2. 该服务通过 JMX 或简单地通过侦听 TCP/unix 域套接字以获取一组有限的已知命令来公开许多方法。
  3. 当需要控制时,服务的一个专用进程(大概是一个用 Java 编写的实用程序,与服务分开)通过指定的命令通道发出所需的命令。

SO question that I mentioned in the comments 包含所有必要的技术细节。其实所有的功劳都应该在那里,我只是重新排列他们的话。

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

【讨论】:

    【解决方案2】:

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

    1. 程序 A 的 RMI URL 保存在数据库或文件系统中。
    2. 程序 B 读取该 RMI URL。
    3. 脚本的启动选项调用程序A的main方法。脚本的暂停选项调用程序B的main方法。
    4. 程序 B 调用程序 A 的远程方法。

    另一种解决方案:调用一个jsp页面,该页面通过在暂停选项中使用脚本中的wget命令来调用程序A上的远程方法。

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      相关资源
      最近更新 更多