systemd 单元配置实战:常驻服务、定时任务,以及跑在容器里的命令

一个后台程序要一直跑着,挂了自动拉起来;另一个程序要每 10 分钟跑一次,跑完就退出。这两件事在 Linux 上都归 systemd 管,前者写成 .service,后者要 .service + .timer 一对。 本文把这两种单元的每个字段拆开讲清楚,说明为什么定时任务用 timer 比 crontab 更合适,以及命令实际跑在 Docker 容器里时最容易踩的那个坑。 一、先分清楚 service 和 timer 很多人第一次配 timer 时会困惑:「定时任务为什么要写两个文件?」 因为这是两件事: .service 回答「这个程序该怎么跑」——跑什么命令、用哪个用户、挂了要不要重启、超时多久算失败 .timer 回答「什么时候去启动它」——每 10 分钟、每天凌晨 3 点、开机 5 分钟后 .service 是名词,.timer 是闹钟。闹钟响了就去按一下那个 service 的启动按钮,至于按下去之后发生什么,是 service 自己的事。 所以常驻型的程序只要一个 .service(它自己不停,不需要闹钟),周期型的要一对,而且两个文件必须同名:myapp-sync.service 配 myapp-sync.timer——timer 靠文件名找到对应的 service,改错一个字母就是「闹钟响了但没有任何反应」。 两种文件都放在 /etc/systemd/system/。 二、常驻型:Type=simple + Restart=always 先看一个真实的例子。一个 Python 写的后台 worker,从队列里领任务、执行、再领下一个,永远不退出: [Unit] Description=myapp 后台 worker After=network-online.target docker.service Wants=network-online.target [Service] Type=simple Environment=TZ=Asia/Shanghai WorkingDirectory=/var/www/myapp ExecStart=/var/www/myapp/.venv/bin/python -m worker Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target 逐段拆开。 ...

September 2, 2026 · 5 min · 翼橙

配置 Docker 国内镜像加速:daemon.json 写法、生效验证与排错

从国内直接拉 Docker Hub 的镜像,常见的表现是速度只有几十 KB/s,或者干脆卡在 Retrying in 5 seconds 反复重试。解决办法是给 Docker 配一组镜像加速源—— 它们是 Docker Hub 的只读缓存,你 docker pull 时 Docker 先去这些地址找, 找不到才回源。 一、写入 daemon.json /etc/docker/daemon.json 是 Docker 守护进程的配置文件,registry-mirrors 就是加速源列表。配多个是为了容错:某个源挂了会自动试下一个。 执行以下命令: sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.1panel.live", "https://docker.1ms.run", "https://dytt.online", "https://docker-0.unsee.tech", "https://lispy.org", "https://docker.xiaogenban1993.com", "https://666860.xyz", "https://hub.rat.dev", "https://docker.m.daocloud.io", "https://demo.52013120.xyz", "https://proxy.vvvv.ee" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 这些镜像源来自 GitHub 项目 dongyubin/DockerHub, 那里有一份持续更新的可用列表。 ...

June 27, 2025 · 1 min · 翼橙

使用 Docker 和 Gost 快速搭建 SOCKS5 代理(适用于 TikTok 自建代理)

在进行 Tiktok/Facebook/Instagram营销、注册或自动化管理时,稳定的代理是不可或缺的。本文将介绍如何使用 gost 配合 Docker,快速部署一个带认证的 socks5 代理服务器。 一、安装 Docker 在大多数 Linux 服务器上,只需一条命令即可安装 Docker: apt update && apt install -y docker.io 💡 如果你是 CentOS 或 Alpine 用户,请使用对应的安装方式。 二、运行 Gost SOCKS5 容器 以下命令会拉取 Gost 镜像并运行一个代理容器: docker run -d \ --name gost-socks5 \ -p 886:1080 \ ginuerzh/gost \ -L=socks5://proxyuser:CHANGE_ME_强密码@:1080 参数解释: -d:后台运行容器(detached 模式) --name gost-socks5:容器名称 -p 886:1080:把宿主机的 886 端口映射到容器内的 1080 端口。冒号左边是外面连的端口,右边是容器里 gost 实际监听的端口,两个数不需要一样 ginuerzh/gost:使用官方 Gost 镜像 -L=socks5://用户名:密码@:1080:监听本地 1080 端口,开启带用户名密码认证的 SOCKS5 服务 ⚠️ 请根据实际需求修改用户名、密码、端口(proxyuser 和那串密码都要换掉)。 ...

May 27, 2025 · 1 min · 翼橙