当前位置: 首页 > 面试题库 >

如何调用Shell脚本以启动后端Java进程?

羊舌富
2023-03-14
问题内容

完成Jenkins任务后,我将使用Jenkins的后置条件配置部分执行Linux shell脚本。

该Linux Shell脚本希望在后端启动备用服务,并且不会导致Jenkins暂停。

我尝试使用“ nohup +&”等,但是它不起作用。

有一个好的方法吗?


问题答案:

詹金斯可能正在等待管道关闭。您的后台进程继承了一些文件描述符,并一直保持打开状态。

如果幸运的话,唯一的文件描述符是0、1和2(标准文件描述符)。您可能要使用lsof -p PIDPID是后台进程的进程ID 来检查后台进程的文件描述符。

您应该确保所有这些文件描述符(输入和输出)都已为后台进程重定向,因此应使用类似以下的命令启动它:

nohup daemon </dev/null >/dev/null 2>&1 &

可以将输出定向到其他文件,/dev/null但请确保保留重定向顺序。顺序很重要。

如果您计划从Jenkins作业启动后台进程,请注意,在构建结束时,Jenkins将终止后台进程。请参阅https://wiki.jenkins-
ci.org/display/JENKINS/ProcessTreeKiller
了解如何防止这种情况。



 类似资料:
  • 问题内容: 在Amazon S3 Linux实例上,我有两个名为的脚本,它们 永远 启动和停止(依次运行Node.js应用程序)。我使用这些脚本手动启动和停止我的Node.js应用程序。到目前为止,一切都很好。 我的问题:我还想将其设置为在系统启动时运行。我知道我需要在其中添加文件,并且知道如何将其符号链接到其中的适当目录,但是我无法弄清楚放置在其中的文件中实际需要什么。我认为这应该只是一条线,例

  • 用途:使用php将命令直接输入minecraft服务器控制台 我正在尝试使用php脚本(从浏览器运行)来执行shell脚本。当我从终端运行php时,它就可以工作了!但在浏览器中,什么都不会发生。 从终端运行时,我得到一个“数组0”,但浏览器给我一个“数组1” 问题是什么?一旦我运行了shell,之后的一切不应该像在终端上一样工作吗?(shell脚本内部的内容是否重要?) shell拥有所有rx权限

  • 问题内容: 如何从外壳脚本内部执行Java方法? 问题答案: 您只能调用该方法。设计您的方法,使其调用所需的方法。 当我说 调用 方法时,您不会显式调用它。调用它是Java程序的唯一入口点。 如果您的班级看起来像: 您可以使用以下命令行在您可以找到的目录中调用from (如果您位于下面显示的结构的目录中): 如果要从其他目录(请参见下面的目录结构)执行此操作,则必须设置类路径。 为了清楚起见,请采

  • 问题内容: 如何从python代码调用Shell脚本? 问题答案: 该子模块将帮助你。 显而易见的例子: 其中是一个简单的shell脚本,它是此运行的返回值。

  • 本文向大家介绍CentOS下redis自启动shell脚本,包括了CentOS下redis自启动shell脚本的使用技巧和注意事项,需要的朋友参考一下 用这个脚本管理之前,需要先配置下面的内核参数,否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上: 然后应用生效: 然后增加服务并开机自启动: 脚本源码: 注意:请将脚本中redis的启动文件、配置文件和

  • 问题内容: 我正在使用以下命令启动子流程: 但是,当我尝试杀死使用: 要么 该命令一直在后台运行,所以我想知道如何才能真正终止该过程。 请注意,当我使用以下命令运行命令时: 发出时,它确实成功终止。 问题答案: 使用进程组,以便能够向组中的所有进程发送信号。为此,您应该将会话ID附加到生成的子进程的父进程中,在您的情况下这是一个外壳程序。这将使其成为流程的组长。因此,现在,当信号发送到流程组负责人