<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>frp on 极客Vinkey</title>
    <link>https://www.mawenqian.com/zh/tags/frp/</link>
    <description>Recent content in frp on 极客Vinkey</description>
    <image>
      <title>极客Vinkey</title>
      <url>https://www.mawenqian.com/images/papermod-cover.png</url>
      <link>https://www.mawenqian.com/images/papermod-cover.png</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <copyright>MA Wenqian · mawenqian.com</copyright>
    <lastBuildDate>Tue, 18 Aug 2026 13:18:43 +0800</lastBuildDate>
    <atom:link href="https://www.mawenqian.com/zh/tags/frp/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 systemd 模板单元一份配置跑多个实例：以 frp 为例</title>
      <link>https://www.mawenqian.com/zh/systemd-template-unit/</link>
      <pubDate>Tue, 18 Aug 2026 09:30:00 +0800</pubDate>
      <guid>https://www.mawenqian.com/zh/systemd-template-unit/</guid>
      <description>&lt;p&gt;一台机器上要同时连三个 frp 服务端，网上大部分教程的做法是复制三份 &lt;code&gt;frpc.service&lt;/code&gt;，改三次路径。改一次参数要同步改三个文件，迟早出错。&lt;/p&gt;
&lt;p&gt;systemd 自带的**模板单元（template unit）**就是为这种场景准备的：写一份 &lt;code&gt;frpc@.service&lt;/code&gt;，后面想开几个实例就开几个。这篇先用 frp 走一遍完整流程，再讲怎么把同一套写法套到 xray、socat、Python 脚本等任何需要多开的程序上。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id=&#34;模板单元是什么&#34;&gt;模板单元是什么&lt;/h2&gt;
&lt;p&gt;普通单元文件叫 &lt;code&gt;frpc.service&lt;/code&gt;，模板单元文件名多一个 &lt;code&gt;@&lt;/code&gt;，叫 &lt;code&gt;frpc@.service&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;它本身不会运行，只有在你启动 &lt;code&gt;frpc@azure_hk.service&lt;/code&gt; 的时候，systemd 才会拿这个模板生成一个真正的实例，并且把 &lt;code&gt;@&lt;/code&gt; 后面的那串字符串（这里是 &lt;code&gt;azure_hk&lt;/code&gt;）作为&lt;strong&gt;实例名&lt;/strong&gt;，替换掉单元文件里的 &lt;code&gt;%i&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;所以「一份模板 + N 个实例名 = N 个互相独立的服务」，每个实例有独立的进程、独立的日志、独立的启停状态，但共用同一份单元文件。&lt;/p&gt;
&lt;h2 id=&#34;frp-实战&#34;&gt;frp 实战&lt;/h2&gt;
&lt;h3 id=&#34;1-写模板单元&#34;&gt;1. 写模板单元&lt;/h3&gt;
&lt;p&gt;新建 &lt;code&gt;/etc/systemd/system/frpc@.service&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Frp Client Service - %i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;network.target syslog.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Wants&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;network.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;simple&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;on-failure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;RestartSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;5s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# %i 会被替换为 @ 后面的实例名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/usr/local/frp/frpc -c /usr/local/frp/frpc-%i.toml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;multi-user.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-按命名约定放配置文件&#34;&gt;2. 按命名约定放配置文件&lt;/h3&gt;
&lt;p&gt;模板能生效的前提是&lt;strong&gt;配置文件名和实例名一一对应&lt;/strong&gt;。这里约定为 &lt;code&gt;/usr/local/frp/frpc-&amp;lt;实例名&amp;gt;.toml&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
