如何让 Ubuntu 服务器在你关机后继续执行命令

💡 为什么关掉电脑后命令会中断?

当我们用 ssh 登录服务器时,远程命令实际上依附在当前 SSH 会话 上。

如果关闭电脑、断开连接或退出终端,所有在当前会话中运行的进程(除非被特别"脱离")都会被系统回收。

例如:

复制代码
ssh ubuntu@myserver
docker compose pull

一旦你关闭笔记本或断网,docker compose pull 就会被终止。


✅ 目标:让任务"独立运行"

我们希望命令即使在你:

  • 关闭本地电脑

  • 断开 SSH

  • 甚至重启服务器后

依然能够自动或持续执行。

Ubuntu 提供了三种成熟的方式来实现这一点。


🧩 方案一:

nohup ------ 最简后台执行

1️⃣ 基本用法

复制代码
nohup your_command > output.log 2>&1 &

例如:

复制代码
cd /var/www/supabase-sk-auth
nohup docker compose pull > pull.log 2>&1 &

2️⃣ 参数说明

参数 含义
nohup 忽略挂起信号(HUP),防止断开 SSH 时进程被杀死
> output.log 把输出写入文件
2>&1 把错误输出重定向到同一文件
& 后台运行,不阻塞终端

3️⃣ 管理命令

查看任务:

复制代码
ps aux | grep docker

查看日志:

复制代码
tail -f pull.log

停止任务:

复制代码
kill <PID>

✅ 优点:极其简单

⚠️ 缺点:不支持交互,无法重新进入查看实时输出


🧩 方案二:

tmux ------ 可恢复的终端会话(推荐)

1️⃣ 安装

复制代码
sudo apt install tmux -y

2️⃣ 创建会话并执行命令

复制代码
tmux new -s dockerpull
cd /var/www/supabase-sk-auth
docker compose pull

此时,你可以按下:

复制代码
Ctrl + B, 然后 D

即可"分离"会话。任务仍在后台运行。

3️⃣ 重新连接

复制代码
tmux attach -t dockerpull

查看所有会话:

复制代码
tmux ls

删除会话:

复制代码
tmux kill-session -t dockerpull

✅ 优点:

  • 即使关机、断网也不会中断

  • 可重新连接、查看实时输出

  • 适合长期执行的命令或脚本

⚠️ 缺点:

  • 需要手动进入会话(比 nohup 多一步)

🧩 方案三:

systemd ------ 永久守护进程(自动启动)

如果你想让命令在系统重启后也自动执行,可以创建一个自定义服务。

1️⃣ 新建服务文件

复制代码
sudo nano /etc/systemd/system/dockerpull.service

2️⃣ 写入配置

复制代码
[Unit]
Description=Pull Docker images automatically
After=network.target

[Service]
ExecStart=/usr/bin/docker compose -f /var/www/supabase-sk-auth/docker-compose.yml pull
WorkingDirectory=/var/www/supabase-sk-auth
StandardOutput=append:/var/www/supabase-sk-auth/pull.log
StandardError=append:/var/www/supabase-sk-auth/pull.log
Restart=always

[Install]
WantedBy=multi-user.target

3️⃣ 启动并启用服务

复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now dockerpull.service

从此:

  • 系统启动时会自动执行

  • 日志写入 pull.log

  • 若失败会自动重启


🧭 三种方法对比

场景 推荐方法 是否可断线继续 是否可重启继续 适合任务类型
一次性命令 nohup 拉取镜像、短脚本
可交互、可恢复任务 tmux 构建、训练、爬虫
永久守护进程 systemd 后台服务、长期任务

🧰 附:可直接复用的脚本模板

如果你经常要执行同类任务,可以创建一个小脚本:

复制代码
#!/bin/bash
cd /var/www/supabase-sk-auth
tmux new -d -s dockerpull "docker compose pull && docker compose up -d"

保存为 run-docker-pull.sh,赋予执行权限:

复制代码
chmod +x run-docker-pull.sh

然后只需:

复制代码
./run-docker-pull.sh

就会自动在后台 tmux 会话中执行。


🏁 总结

当你关闭电脑后,只要服务器仍在运行:

  • nohup 是最轻量的后台执行方式;

  • tmux 是最灵活的交互式解决方案;

  • systemd 是最稳定的自动化守护方案。

如果你经常在服务器上执行构建、部署、Docker 等任务,

推荐使用 tmux + 脚本封装,既安全又可控。


✍️ 作者的话

很多人误以为"关掉自己电脑,任务就会停"。

其实,只要命令运行在远程服务器上,它独立于你的电脑存在。

关键是让进程 不依赖于当前 SSH 会话------这正是本文介绍的三种方案的核心原理。

相关推荐
爱写代码的森7 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影12 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙13 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码13 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
groundhappy14 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕15 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫16 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
国科安芯16 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信