用 systemd 让程序开机自启(以 FRP 为例)

FRP 下载下来就是一个可执行文件,直接运行的话,关掉终端就停了,重启后也不会自己起来。交给 systemd 管理,就能后台运行并开机自启。

假设 FRP 服务端(frps)在云服务器上,客户端(frpc)在家里的服务器上。下面以服务端为例,客户端照着改名字即可。

1. 写一个服务文件

1
sudo vim /etc/systemd/system/frps.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=FRP Server Service
After=network.target

[Service]
Type=simple
User=root
ExecStart=/opt/frp/frps -c /etc/frp/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • ExecStart 里的 /opt/frp/frps 和 /etc/frp/frps.toml 是本文假设的程序和配置文件位置,换成你自己的路径。
  • 客户端就新建一个 frpc.service,把里面的 frps 都换成 frpc。
  • 新版 FRP 用 .toml 配置文件,老版本用 .ini,两者写法不一样,别混用。

2. 启用并启动

1
2
3
4
5
6
7
8
# 让 systemd 读取新的服务文件
sudo systemctl daemon-reload

# 开机自启
sudo systemctl enable frps

# 立即启动
sudo systemctl start frps

3. 确认运行状态

1
sudo systemctl status frps

看到 active (running) 就说明服务端已经跑起来了。

出了问题看日志:

1
journalctl -u frps

这套写法不只适用于 FRP,任何需要常驻后台的程序都可以这样配。