![ssh 远程服务器中的执行停止](https://linux22.com/image/935240/ssh%20%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%9A%84%E6%89%A7%E8%A1%8C%E5%81%9C%E6%AD%A2.png)
我正在尝试通过我的机器上的 Linux 终端中的 SSH 在远程服务器上运行 Quantum ESPRESSO。
为此,我正在运行一个二进制可执行程序,其文本输入文件如下:
$ mpirun -np 20 pw.x < input.in > output.out
程序正在成功执行,但在某个时间点(2 小时后)停止,并且不会将结果写入输出文件。
我该怎么做才能从程序停止的地方再次执行它,因为我不想从头开始运行它(因为它会消耗大量时间)?
停止的原因可能是什么?
我该如何再次执行它?
请帮忙。我对此没什么线索了。
感谢您!
答案1
根据评论部分: 当 SSH 连接关闭时,您的脚本很可能会被远程操作系统终止,无论是由远程服务器还是本地机器。
远程机器为什么关闭连接?
这是 SSH 服务器的默认安全配置 - 当达到允许的最大会话时间或达到允许的最大空闲时间时关闭会话。
为什么远程用户启动的进程一旦注销就会终止?
答案比安全原因更简单:ssh logout 几乎相当于本地用户退出系统,从而终止他们启动的所有进程。系统发送一个信号每个过程信号这导致他们开始终止程序。
如何避免 ssh 注销后该进程终止?
一旦使用 SSH 连接到远程计算机,我们就可以使用以下命令运行命令/脚本禁止注销时忽略此信号:
nohup <script_or_program> &
就你的情况而言:
nohup mpirun -np 20 pw.x < input.in > output.out &
我们希望在注销后保留的每个进程都必须使用 来启动nohup
。
关于 nohup 的重要说明:
除非我们的进程自行终止,否则从此时起如果我们想手动终止它(通过远程或本地连接),我们必须使用以下命令手动向进程发送 SIGKILL 信号kill
:
kill -9 <process_id>