从本地(非 ssh)会话注销后保持进程活动

从本地(非 ssh)会话注销后保持进程活动

我退出机器后还能保持服务器进程继续运行吗?

通常我会使用screentmuxnohup,当我不使用 ssh 而是在本地使用机器时,这些方法都可以使用。(它还运行着 Gnome 桌面。)

那么,当您本地登录到机器时,有没有什么方法可以启动服务器进程?

答案1

从 systemd 230 开始,KillUserProcesses默认启用:

https://github.com/systemd/systemd/commit/97e5530cf2076a2b4fc55755917262607aaa6338

您可以通过编辑来更改此设置/etc/systemd/logind.conf,例如通过设置KillUserProcesses=no全局禁用此行为,或设置KillExcludeUsers=<your-username>将您的用户名排除在此行为之外。

或者,您可以通过使用 启动服务器进程来临时解决这个问题systemd-run --scope --user <executable>。您可以在Example 5. Start screen as a user service底部找到有关此问题的更多详细信息systemd 运行(1)

答案2

我正在运行 Debian Stretch,KillUserProcesses默认情况下在系统上禁用,但screen注销后无法继续运行。经过一些实验,以下操作似乎可以在本地注销后保持屏幕会话运行:

screen -m

或者如果你想立即分离

screen -m -d

我不知道为什么会这样,但它似乎对我有用。

编辑:

我做了一些测试,似乎无法使用命令运行屏幕。我启动了 4 个会话,并在需要时将其分离:

退出前:

user    31365     1  0 16:20 ?        00:00:00 SCREEN -S mdc -m -d vim
user    31376     1  0 16:20 ?        00:00:00 SCREEN -S md -m -d
user    31391     1  0 16:20 ?        00:00:00 SCREEN -S mc -m vim
user    31399     1  0 16:21 ?        00:00:00 SCREEN -S m -m

退出并重新登录后:

user    31376     1  0 16:20 ?        00:00:00 SCREEN -S md -m -d
user    31399     1  0 16:21 ?        00:00:00 SCREEN -S m -m

看起来用命令启动的两个实例在注销期间终止了。我连接到剩余的两个会话并启动了 VIM,然后断开连接并再次注销。重新登录后,会话仍在运行,并且 VIM 仍在每个会话中运行。

相关内容