SSH一断开程序就死?教你让它永远跑在后台

SSH一断开程序就死?教你让它永远跑在后台

你有没有遇到过这种情况:

好不容易按照教程,把 PicoClaw 部署好了,在终端里跑起来,发消息给机器人,它也乖乖回复了。然后你关掉了 SSH 窗口,去睡了一觉。第二天打开d电报,发消息——没有任何回应。

重新连上服务器一看,进程早就不见了。

你不是操作失误,这是 Linux 的正常行为。今天这篇文章,就来彻底解决这个问题。


一、为什么关掉终端程序就死了?

要理解这个问题,先要知道一件事:你通过 SSH 连上服务器时,其实是开启了一个"会话"。你在这个会话里启动的所有程序,都是这个会话的"子进程"。

一旦你关闭 SSH 窗口,这个会话就结束了,系统会自动把它的所有子进程一并"清理"掉——包括你辛苦跑起来的 PicoClaw。

你可能听说过一些"老方法",比如在命令前加 nohup,或者用 screentmux 开一个持久窗口。这些方法确实能用,但对新手来说有个共同的问题:不够可靠,而且系统重启之后还是得手动再跑一遍

有没有更优雅的解决方案?有,就是 Linux 系统自带的服务管理器——systemd


二、正确姿势:systemd 用户服务

systemd 是现代 Linux 系统的"大管家",负责管理系统里所有的后台服务,比如数据库、Web 服务器等等。系统启动时,它第一个运行;程序崩溃了,它负责重启。

systemd 有两种模式:

  • 系统级服务:管理整台机器的服务,需要 root 权限,改起来有一定风险
  • 用户级服务:只管理你自己账户下的服务,完全不需要 sudo,更安全,更适合我们这种场景

我们今天用的就是用户级服务。除了第一次配置需要一条 sudo 命令之外,之后的日常管理完全不需要任何特殊权限。


三、手把手操作

第一步:创建服务文件

用户级 systemd 的配置文件放在一个固定的目录里,我们先把这个目录建好:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/picoclaw.service

在打开的编辑器里,把下面的内容完整复制进去:

[Unit]
Description=PicoClaw AI Gateway
After=network.target

[Service]
Type=simple
WorkingDirectory=%h
ExecStart=%h/pico/picoclaw gateway
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

解释几个关键字段:

  • After=network.target:等网络准备好了再启动,PicoClaw 需要联网,这一行很重要
  • ExecStart:你的程序实际启动命令,%h 是 systemd 内置的"家目录"变量,会自动替换成你的实际路径
  • Restart=on-failure:程序意外崩溃时,systemd 会自动把它重新拉起来
  • RestartSec=5:崩溃后等 5 秒再重启,避免反复崩溃时疯狂重启

编辑完成后,按 Ctrl+X,输入 Y,再按回车保存。(如果你安装了上一期介绍的 msedit,也可以用 msedit ~/.config/systemd/user/picoclaw.service 来编辑)

第二步:启用并启动服务

# 让 systemd 读取我们刚写的配置文件
systemctl --user daemon-reload

# 设置开机自动启动
systemctl --user enable picoclaw

# 现在就立刻启动
systemctl --user start picoclaw

第三步:验证是否成功

systemctl --user status picoclaw

如果看到输出里有这样一行绿色的文字:

Active: active (running)

恭喜你,服务已经成功运行了!


四、解决"退出 SSH 后停止"的问题

等等,还没完。用户级 systemd 服务有一个默认限制:你退出 SSH 登录后,用户级的服务仍然会被停掉

解决方法是开启 linger(驻留)模式,告诉系统:即使这个用户没有登录,也要保持他的服务运行。

sudo loginctl enable-linger 你的用户名

这条命令只需要执行一次,执行之后立即生效,而且重启后也会保持。这是整个流程里唯一需要 sudo 的地方。

执行完之后,你可以测试一下:重新启动服务,然后退出 SSH,等一两分钟,再打开 Telegram 发一条消息,看看 PicoClaw 是否还在正常响应。


五、日常管理备忘

以后管理 PicoClaw 服务,这几条命令就够用了:

systemctl --user stop picoclaw      # 停止服务
systemctl --user restart picoclaw   # 重启服务(改完配置后用这个)
systemctl --user status picoclaw    # 查看当前状态
journalctl --user -u picoclaw -f    # 实时查看运行日志

最后一条 journalctl 是排查问题的利器。如果 PicoClaw 突然不响应了,第一时间跑这条命令,日志里通常能直接告诉你哪里出了问题,比如 API Key 过期、网络超时等等。


写在最后

学会用 systemd 管理服务,是 Linux 使用中一个非常重要的转折点。从此以后,你的程序不再是"脆弱的手动进程",而是一个真正意义上的系统服务——开机自启、崩溃自愈、无需人工值守。

互动一下: 你之前是用什么方法保持程序后台运行的?nohupscreen?还是每次重启都手动跑一遍?欢迎评论区告诉我!

觉得有用的话,点个"在看"支持一下!

Read more

fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

fnm + uv + rustup:打造 Debian/Ubuntu 下最丝滑的开发环境“三剑客”,彻底告别 Linux 权限地狱

作为一名长期在 Linux 服务器上工作的开发者,我见过不少因权限管理不当导致的问题:有人为了装最新的 Node.js 强行添加了来源不明的 PPA,结果导致 apt 依赖损坏,系统无法正常更新;有人习惯了 sudo pip install,直到某天发现系统自带的工具因为 Python 库版本冲突而无法运行;还有的人在 npm i -g 时遇到 Permission denied,最后执行了 sudo chmod -R 777 /usr/lib。 今天这篇文章,介绍如何用普通用户权限在 Debian/Ubuntu 下配置 Node.js、Python 和 Rust 开发环境,彻底避免上述问题。 为什么要坚持非 root 安装? 保护系统稳定性。

By serverinf
除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

除了 127.0.0.1,你电脑里其实还住着 1600 万个“自己”

身为开发者,你一定每天都在和 127.0.0.1 打交道。 启动后端服务、连接 Redis、调试 API…… 在我们的潜意识里: 127.0.0.1 = localhost = 本机。 但你有没有想过: 为什么偏偏是 127? 既然 127.0.0.1 代表自己,那 127.0.0.2 又是谁? 甚至,为什么 Linux 里还有一个诡异的 127.0.1.1? 今天,我们拆开这个被用了 40 年的“回环地址”包裹,看看里面藏着哪些你不知道的秘密。 一、

By serverinf
全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

全球机房探秘:第 5 期:韩国机房:全球网速最快国家的真相,北方用户的隐藏福利

摘要:千兆入户的"网速天堂",为什么连回国内却经常卡顿?KT、SK、LG 怎么选?韩国 VPS 到底适合谁? 在上一篇日本机房的文章里,我们聊了"白天法拉利,晚上拖拉机"的线路选择难题。今天,我们把目光投向一个自带光环的地方——韩国机房。 经常关注科技新闻的朋友都知道,在各类全球网速排行榜上,韩国经常霸占榜首,千兆(1Gbps)甚至万兆网络入户简直是家常便饭。 很多新手就会想:"既然韩国网速全球第一,那我买个韩国 VPS,速度岂不是原地起飞?" 先别急着掏钱! 理想很丰满,现实往往有点骨感。欢迎来到《全球机房探秘》第六站,今天我们来扒一扒"全球最快网速"背后的真相。 01 真相一:内网&

By serverinf
拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

拒绝"挤爆"内存:部署 OpenClaw 到底需要多高配置的 VPS /云服务器?

最近 AI 圈最火的开源项目,莫过于被称为“大龙虾”的 OpenClaw 了。 如果你还没听说过它,简单解释一下:它不是那种只能陪你聊天的机器人,而是一个真正的“数字员工”。它能自己查资料、写代码、操作你的服务器终端、甚至在浏览器里帮你下单购物。这种“自主性”让无数开发者直呼:AI 终于从“只会动嘴”进化到“能动手干活”了。目前 OpenClaw 在 GitHub 上已积累超过 68,000 个 Star,是目前增速最快的开源项目。 然而,很多新手兴冲冲地在自己吃灰多年的“1核 1G”入门级 VPS 上部署后,迎来的不是效率的飞跃,而是没完没了的断连、报错、卡死。 今天,我们就来拆解一下:想要稳稳地跑起

By serverinf