iro*_*orm 5 ssh tmux nohup systemd-logind systemd
我正在运行 KDE Neon,它是 Ubuntu 18.04 Bionic (LTS),其上有最新的 KDE 桌面软件包。
自从从 Xenial 升级到此版本以来,我失去了进程在 SSH 会话断开连接后继续存在的能力...特别是 nohup、tmux、screen、byobu 及其所有子进程在断开连接时都会被杀死。
这是一个简单的测试来演示这个问题
# connect over ssh
cd /tmp
nohup watch date &
ps -ef | grep watch
# disconnect and reconnect
ps -ef | grep watch # process is gone
Run Code Online (Sandbox Code Playgroud)
我尝试将 tmux 和 byobu 恢复到旧版本,然后发现 nohup 也受到影响。这让我相信它要么是 SSHd 配置,要么是 systemd。
显然,systemd 决定更改其默认行为,以便在用户前一段时间断开连接时核对所有用户进程。我尝试通过编辑 /etc/systemd/logind.conf 并设置 KillUserProcesses=no 然后重新启动(服务 systemd-logind 重新启动不起作用)来恢复该行为。没用……我已经束手无策了。
帮助!
我刚刚遇到了完全相同的问题,巧合的是,Ubuntu 18.04 也安装了 KDE Neon 软件包。
事实证明,当会话结束时,systemd 会终止所有用户进程,例如,当您终止 SSH 登录时,因为您认为稍后会使用 tmux 重新连接。;)
要修复,请执行以下步骤:
进行以下更改/etc/systemd/logind.conf:
KillUserProcesses=no
KillExcludeUsers=root YOUR_USER_NAME
Run Code Online (Sandbox Code Playgroud)
并重新启动systemd-logind:
sudo systemctl restart systemd-logind
Run Code Online (Sandbox Code Playgroud)
通过以下方式为您的帐户启用延迟:
loginctl enable-linger YOU_USER_NAME
Run Code Online (Sandbox Code Playgroud)
我最初只启用了 lingering 和KillUserProcesses=no,但我的 tmux 仍然被杀死。只有修改后KillExcludeUsers(感谢https://askubuntu.com/a/1097134/59971)我才能安心继续我的神经网络训练。
您想使用该setsid命令使其成为会话领导者。
nohup意味着“不挂起”,这在很大程度上只是断开各种标准输入/输出流的连接,但该进程仍然由 bash 进程“拥有”,而 bash 进程又由 SSH 进程拥有。当您与 SSH 断开连接时,所有这些子进程都会随之消失。
通过使用setsid您可以在 SSH 范围之外重新设置进程的父级。
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |