Skip to content

将frp做成系统服务

提示: 以下代码均以./frps -c frps.toml命令为基础

一、目录假设(不变)

text
/home/frp/frp_0.65.0_linux_amd64/
├── frps
├── frps.toml
├── frp.sh        # 管理脚本(start/stop/restart/log)

二、frp 管理脚本(命令入口)

/home/frp/frp_0.65.0_linux_amd64/frp.sh

bash
#!/bin/bash

SERVICE_NAME=frp

case "$1" in
  start)
    sudo systemctl start ${SERVICE_NAME}
    ;;
  stop)
    sudo systemctl stop ${SERVICE_NAME}
    ;;
  restart)
    sudo systemctl restart ${SERVICE_NAME}
    ;;
  status)
    systemctl status ${SERVICE_NAME}
    ;;
  log)
    journalctl -u ${SERVICE_NAME} -f
    ;;
  *)
    echo "Usage: frp {start|stop|restart|status|log}"
    exit 1
    ;;
esac
bash
chmod +x frp.sh

三、systemd 服务文件(核心)

创建服务

bash
sudo nano /etc/systemd/system/frp.service

✅ /etc/systemd/system/frp.service

ini
[Unit]
Description=FRP Server (frps)
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=yize
WorkingDirectory=/home/frp/frp_0.65.0_linux_amd64
ExecStart=/home/frp/frp_0.65.0_linux_amd64/frps -c frps.toml
Restart=always
RestartSec=5
LimitNOFILE=1048576

StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

四、加载 & 开机自启

bash
sudo systemctl daemon-reload
sudo systemctl enable frp
sudo systemctl start frp

五、把 frp 做成系统命令(强烈推荐)

bash
sudo ln -s /home/frp/frp_0.65.0_linux_amd64/frp.sh /usr/local/bin/frp

现在你可以直接使用:

bash
frp start
frp stop
frp restart
frp status
frp log

六、验证是否成功

bash
systemctl status frp

看到:

text
Active: active (running)

说明一切正常 ✅

七、常见补充(必要时)

端口 < 1024(例如 80 / 443)

bash
sudo setcap 'cap_net_bind_service=+ep' /home/frp/frp_0.65.0_linux_amd64/frps

最终总结一句话

frp = systemd 服务名 + 统一 CLI 命令,前台运行 frps,systemd 负责后台与自启