在执行中执行 nohup 的 ssh 远程调用在很短的时间内退出

ssh remote call which executes nohup inside the execution exits in very short time

我有一些测试 bash 文件,如下所示(test.sh 和 755 mod)

#! /bin/bash
nohup /usr/bin/java -Xms4g -Xmx4g  -Dspring.profiles.active=test -jar /home/users/me/test.jar > /dev/null 2>&1 &
exit 1

然后我通过 ssh 执行这个文件,比如

$> ssh test@server /home/users/me/sh/test.sh

在它运行时,我在 test@server 上重复执行 jps 以监视进程。我可以在提示符中看到 test.jar,但某些时候它会在远程 ssh 命令执行后大约 1~2 秒后消失。

喜欢..

test@server /home/users/me: jps
1281492 Jps
1281485 test.jar
test@server /home/users/me: jps
1281546 Jps
1281485 test.jar
test@server /home/users/me: jps
1281580 Jps

在我看来,java 工作应该持续下去,因为它与 nohup 一起工作。知道原因吗?谢谢

=====更新

就我而言,问题出在 ssh 工作目录上。正如 RenaudPacalet 在评论中提到的那样,我能够通过将 nohup 输出定向到日志文件中来弄清楚。

更具体地说,Spring boot jar 在启动时会找到 config 目录。我得到了我的配置目录,如 /home/users/me/config.

所以当我通过 ssh 发送命令时,boot 试图启动(这就是为什么我可以在短时间内在 jps 中观看 test.jar)但是它失败了,因为它不知道去哪里循环配置。(因为我没有说明在哪里执行命令)

总之,我必须像下面这样修复

$> ssh test@server 'cd /home/users/me; /home/users/me/sh/test.sh'

检查脚本中的所有路径是否正确,先在不使用nohup的情况下测试脚本,看是否有错误,知道脚本有没有错误,再使用nohup,对nohup进行故障排除从那里开始。

我认为我原来的问题太宽泛了,因为它一次有几个问题。

所以我想通过解释我是如何解决这个具体案例来结束这个问题的。主要问题不在 nohup 中,但将 nohup 输出定向到日志文件显然很有帮助。

就像我在原来的 post update 部分中写的那样。通过ssh执行命令时,需要注意命令执行的具体位置。

所以我通过像这样移动工作目录解决了这个问题

$> ssh test@server 'cd /home/users/me; /home/users/me/sh/test.sh'