如何防止程序在 ssh 会话终止时终止?

Ziz*_*ncs 3 ssh gnu-screen terminal nohup

我有一个非常旧的控制台应用程序,我想让它更有弹性。该程序是这样使用的:

  • 用户使用自定义终端模拟器通过 ssh 连接到远程机器
  • 用户启动一个 shell 脚本
  • shell 脚本可能会启动一个长时间运行的进度数据库进程。

显然,有时用户只是失去了与机器的 ssh 连接,在这种情况下,ssh 会话被终止,在里面运行的 shell 脚本也被终止,最后进度数据库进程也被终止。在千分之一的情况下,这会导致数据库损坏,所以我想防止它发生。

到目前为止我尝试过的:

  • 在启动 shell 脚本之前启动屏幕或 tmux 会话 - 这不起作用,因为应用程序需要将 TERM 变量设置为 at386(并且它完全绕过了 termcap/terminfo...呃...)
  • nohup/disown the progress process - 这不起作用,因为 shell 脚本和进度过程似乎以晦涩的方式不断地相互通信

关于如何确保在 ssh 会话被终止时进度过程不会终止的任何其他想法?

Ada*_*tek 5

添加term at386到您的 .screenrc 以覆盖 TERM。如果这没有帮助,请尝试使用dtach而不是 Screen(它本身不进行任何终端仿真)。