GPU服务器又连不上了,实验室的师兄弟们表示很捉急,连上去一检查,发现是 frp 内网穿透服务挂了,研究了一番systemd 服务配置,决定配置 frp 为systemd 服务,实现开机自启。

Frp

frp 所在的文件夹为 /home/user/frp
编写 frps.ini 文件作为服务端配置,编写 frpc.ini 作为客户端配置。

frps.ini 中写入 server 端要监听的端口即可,如下:

  1. [common]
  2. bind_port = 25111

frpc.ini 中写入

  1. [common]
  2. server_addr = 45.100.145.55
  3. server_port = 25111
  4. [ssh]
  5. type = tcp
  6. local_ip = 127.0.0.1
  7. local_port = 22
  8. remote_port = 25222

启动 frps

nohup ./frps -c frps.ini >> frps.log 2>&1 &

启动 frpc

./frpc -c ./frpc.ini

多 client 使用同一 server

server 端配置不变, client 端的 frpc.ini 配置文件中方括号中配置不同的名称和端口即可,frp 使用方括号中的内容来识别客户端的不同服务。连接时使用的是服务器 ip + frpc.ini 中配置的 remote_port。

[common]
server_addr = 45.100.145.55
server_port = 25111

[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 25222

[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 25223

systemd 服务

将 frp client 配置为 systemd 服务实现重启后自动重启

sudo vi /etc/systemd/system/frpc.service

写入下面内容, ExecStart 为frp 服务启动命令,注意修改路径为自己的 frp 路径

[Unit]
Description=FRP Client Daemon
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/home/user/.frp/frp_0.29.0_linux_amd64/frpc -c /home/user/.frp/frp_0.29.0_linux_amd64/frpc.ini
Restart=always
RestartSec=20s
User=nobody

[Install]
WantedBy=multi-user.target

然后启动 frps
sudo systemctl start frpc
再打开自启动
sudo systemctl enable frpc

错误排查

查看报错信息

sudo journalctl -xe

报错信息如下:
image.png
报错显示为权限不足,更改 /etc/systemd/system/frpc.service 中 User 为具有权限的用户即可。