用 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: ...