小编Ziz*_*ncs的帖子

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

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

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

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

到目前为止我尝试过的:

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

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

ssh gnu-screen terminal nohup

3
推荐指数
1
解决办法
2267
查看次数

无法在 WSL 上的 Distrod 上的 Archlinux 上覆盖 systemd 单元的 ConditionVirtualization

我正在尝试在 Archlinux 上启动 systemd-timesyncd,它是通过 Distrod 安装在 WSL 之上的。默认情况下,systemd-timesyncd 的单元文件会阻止它在虚拟化环境中启动,该单元文件有一个ConditionVirtualization=!container标志。我正在尝试使用以下配置来覆盖它:

\n
[root@valentine ~]# systemd-detect-virt\nwsl\n[root@valentine ~]# cat /etc/systemd/system/systemd-timesyncd.service.d/override.conf\n[Unit]\nConditionVirtualization=wsl\n[root@valentine ~]# systemctl daemon-reload\n[root@valentine ~]# systemctl start systemd-timesyncd.service\n[root@valentine ~]# systemctl status systemd-timesyncd.service\n\xe2\x97\x8b systemd-timesyncd.service - Network Time Synchronization\n     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)\n    Drop-In: /etc/systemd/system/systemd-timesyncd.service.d\n             \xe2\x94\x94\xe2\x94\x80override.conf\n     Active: inactive (dead)\n  Condition: start condition failed at Mon 2023-02-27 10:38:46 CET; 6s ago\n             \xe2\x94\x94\xe2\x94\x80 ConditionVirtualization=!container was not met\n       Docs: man:systemd-timesyncd.service(8)\n\nFeb 27 10:38:46 valentine systemd[1]: Network Time Synchronization was skipped because of an unmet condition check (ConditionVirtualization=!container).\n …
Run Code Online (Sandbox Code Playgroud)

arch-linux systemd windows-subsystem-for-linux systemd-timesyncd

2
推荐指数
1
解决办法
1332
查看次数