用 systemd 模板单元一份配置跑多个实例:以 frp 为例

一台机器上要同时连三个 frp 服务端,网上大部分教程的做法是复制三份 frpc.service,改三次路径。改一次参数要同步改三个文件,迟早出错。 systemd 自带的**模板单元(template unit)**就是为这种场景准备的:写一份 frpc@.service,后面想开几个实例就开几个。这篇先用 frp 走一遍完整流程,再讲怎么把同一套写法套到 xray、socat、Python 脚本等任何需要多开的程序上。 模板单元是什么 普通单元文件叫 frpc.service,模板单元文件名多一个 @,叫 frpc@.service。 它本身不会运行,只有在你启动 frpc@azure_hk.service 的时候,systemd 才会拿这个模板生成一个真正的实例,并且把 @ 后面的那串字符串(这里是 azure_hk)作为实例名,替换掉单元文件里的 %i。 所以「一份模板 + N 个实例名 = N 个互相独立的服务」,每个实例有独立的进程、独立的日志、独立的启停状态,但共用同一份单元文件。 frp 实战 1. 写模板单元 新建 /etc/systemd/system/frpc@.service: [Unit] Description=Frp Client Service - %i After=network.target syslog.target Wants=network.target [Service] Type=simple Restart=on-failure RestartSec=5s # %i 会被替换为 @ 后面的实例名 ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc-%i.toml [Install] WantedBy=multi-user.target 2. 按命名约定放配置文件 模板能生效的前提是配置文件名和实例名一一对应。这里约定为 /usr/local/frp/frpc-<实例名>.toml: ...

2026年8月18日 · 2 分钟 · Vinkey

新装 Linux 服务器初始化清单(持续更新)

每次开一台新 VPS,我都会按同一个顺序过一遍:先看看这台机器什么底子,再理顺用户和权限,最后才开始装东西。这篇就是那份清单,也是我自己的命令备忘录,后面会一直往里加。 一、先看看这台机器什么底子 一条命令看全部 Ubuntu 上登录时显示的那一大段摘要,其实可以随时手动调出来: landscape-sysinfo 输出包括系统负载、根分区占用、内存占用、交换分区、进程数、内网 IP,和登录时看到的一模一样。 如果提示命令不存在,装一下 sudo apt install landscape-common。非 Ubuntu 系统没有这个命令,用下面的分项命令代替。 分项快速查看 只想看某一项的时候,这几条更快: free -h 看 available 那一列,不要只看 free。 Linux 会把空闲内存拿去做缓存,free 显示的是完全没被碰过的部分,数字往往小得吓人;available 才是系统真正还能分配给程序用的量。 df -h 磁盘占用。要找出到底是谁把盘吃满了,接着用: sudo du -h --max-depth=1 / | sort -hr | head -20 uptime 系统整体负载。后面三个数字分别是 1 / 5 / 15 分钟的平均负载,和 CPU 核心数比较着看才有意义——4 核机器负载 4 才算跑满。核心数用 nproc 查。 看有哪些服务在跑 systemctl list-units --type=service --state=running 新机器上这条命令能让你知道系统预装了什么在后台跑,顺手关掉不需要的可以省点内存。 只看失败的服务: systemctl --failed 二、用户与权限 让 sudo 免密 如果你想保留自己的普通用户身份、敲命令时依然带 sudo,但不想每次都输密码,可以改 sudoers。 ...

2026年8月18日 · 2 分钟 · Vinkey

端口转发实战:Windows netsh、Linux socat 与 macOS(含命令生成器)

本文总结三大平台的 TCP/UDP 端口转发方法:Windows 用系统自带的 netsh interface portproxy,Linux 和 macOS 用 socat(并注册成开机自启的服务)。文末还有平台对比和排错清单。 命令参数又多又容易记错,所以我在下面放了一个命令生成器,填好地址端口就能直接复制。 什么时候需要端口转发 我自己最常遇到的几种场景: 服务只监听 127.0.0.1,想让局域网里的其他设备也能访问; VPN 抢走了全部路由(比如 Cisco AnyConnect 默认关闭 split tunnel),本机访问不到局域网设备,需要借道一个能通的机器; WSL2 里跑的服务,需要从 Windows 宿主机或局域网访问,而 WSL 的 IP 每次重启都会变; 端口被占用或被规范限制,想用另一个端口对外提供同一个服务。 需要区分两个概念:这里说的都是本机层面的端口转发(用户态代理),也就是「进来的连接原样接到另一个地址端口」;如果要让整台机器充当网关替一个网段做转发,那是 NAT 的活,Linux 上应该用 nftables/iptables 的 DNAT 并打开 net.ipv4.ip_forward,不在本文范围内。 🧰 命令生成器 支持多条规则一起生成,切换标签页即可得到对应平台的命令,每个代码块右上角可以一键复制。 Windows · netsh Linux · socat macOS · socat / pf 协议 TCP UDP + 添加一条规则 重置 ...

2026年8月17日 · 3 分钟 · Vinkey