在执行中执行 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'
我有一些测试 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'