我退出机器后还能保持服务器进程继续运行吗?
通常我会使用screen
、tmux
或nohup
,当我不使用 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 仍在每个会话中运行。