启动脚本后按 CtrlBD 脱离会话

启动脚本后,可按 Ctrl+B 再按 D 快捷键安全脱离当前 tmux 会话,使脚本后台持续运行,终端可继续执行其他命令,脱离后可通过 tmux attach 重新连接会话,该操作不会中断正在运行的进程,适用于长时间任务的后台管理

云服务器挂机不掉线稳定运行底层逻辑与实战避坑指南

游戏多开、自动化脚本、爬虫调度远程办公场景中,“云服务器挂机不掉线”常被用户视为刚需,但现实中,不少用户部署后仍遭遇SSH断连、进程被杀、会话超时退出等问题——这并非云服务器“不可靠”,而是对Linux会话管理资源调度和网络保活机制存在认知偏差,本文从原理出发,提供真正可持续的挂机方案

首先明确一个关键事实:云服务器本身不会“主动掉线”,掉线本质是终端连接中断或后台进程被系统回收,常见诱因有三:一是SSH空闲超时(默认10–30分钟无交互即断连);二是Shell会话结束导致子进程被SIGHUP信号终止;三是内存不足触发OOM Killer强制杀进程;四是云平台底层健康检查误判实例失联。

解决之道不在“找更贵的服务器”,而在于正确利用Linux原生能力,推荐三步法:

第一,绕过SSH生命周期依赖,使用tmuxscreen创建持久化会话。

tmux new-session -s auto_run  # 任意时间重新连接:tmux attach -t auto_run  

相比老旧的nohup+&组合,tmux支持会话复用、窗口分屏、日志回溯,且不依赖登录Shell存活。

第二,屏蔽SIGHUP并守护进程,在启动命令前添加setsid或使用systemd --user服务:

# 创建 ~/.config/systemd/user/monitor.service  
[Unit]  
Description=Long-run Monitor Script  
[Service]  
Type=simple  
ExecStart=/usr/bin/Python3 /home/user/monitor.py  
Restart=always  
RestartSec=10  
[Install]  
WantedBy=default.target  

启用后执行 systemctl --user daemon-reload && systemctl --user enable monitor.service && systemctl --user start monitor.service,此方式由系统级守护进程接管,彻底脱离终端生命周期。

第三,强化网络与资源韧性,修改SSH服务端配置/etc/ssh/sshd_config):

ClientAliveInterval 60  
ClientAliveCountMax 3  

即每60秒发一次心跳包,连续3次无响应才断连,有效对抗NAT超时,同时通过ulimit -u 65535提升用户进程上限,echo 'vm.swappiness=1' >> /etc/sysctl.conf降低内存交换倾向,减少OOM风险

还需注意两个隐形陷阱:一是部分低价云厂商采用共享宿主机架构,若邻居实例突发占用CPU,可能触发CPU节流(Throttling),表现为进程卡顿而非崩溃——建议选择标注“独享vCPU”或启用“CPU积分保障”的实例;二是Python等脚本未捕获异常时,未处理的KeyboardInterruptConnectionResetError会导致静默退出,务必用try...except Exception: time.sleep(30)兜底重试。

最后提醒:真正的“不掉线”≠永不重启,定期更新内、打安全补丁、监控uptimedmesg -T | grep -i "killed process"才是长效保障,云服务器是工具稳定源于设计,而非幻想“一劳永逸”。

(全文共1198字)