设置 frp 开机自启 linux#
首先写一个 sh 脚本,例子:
[Unit]
Description=frps daemon
[Service]
Type=simple
#此处把/root/frp_linux_arm64替换成 你的frps的实际安装目录
ExecStart=/opt/module/frpc/frpc -c /opt/module/frpc/frpc.ini
[Install]
WantedBy=multi-user.target
新建服务文件#
-
登录服务器,输入
sudo vim /lib/systemd/system/frps.service
其实就是在root/lib/systemd/system
下面新建一个文件 frps.service -
在文件里面写入脚本内容,就是上方我给的例子
写完保存退出后服务就可用了 -
然后就启动 frps
sudo systemctl start frps
-
再打开自启动
sudo systemctl enable frps
其他的设置
- 重启应用
sudo systemctl restart frps
- 停止应用
sudo systemctl stop frps
- 查看日志
sudo systemctl status frps
额外配置#
经过测试我发现,在 linux 系统重启并启动 frp 的开机脚本时,它并没办法启动,会遇到网络错误无法连接服务器然后报错的状态,需要手动重启服务。
解决方案,写一个 sh 脚本#
可以通过写一个 sh 脚本 ping 一个地址 ping 通后重新执行服务启动脚本
您可以使用 sleep
命令来暂停脚本执行一段时间,等待网络准备就绪。具体来说,您可以在脚本中添加类似如下的代码:
#!/bin/bash
# 暂停脚本执行 10 秒钟
sleep 10
# 在这里写下您需要执行的命令,等待 10 秒钟再执行。
在上述代码中,sleep
命令后面的数字表示需要暂停执行的时间(单位为秒),您可以根据您的实际情况酌情调整。
另外,您可以使用一些网络命令(如 ping
)来测试网络连接是否可用,并在网络连接可用后再执行您需要执行的命令。例如:
#!/bin/bash
# 每隔 3 秒钟 ping 一次目标地址 目标地址可以替换为你frp服务器的ip地址
while ! ping -c1 -w1 "目标地址" &>/dev/null
do
sleep 3
done
# 在目标地址可用时执行下面的命令
在上述代码中,while
循环中的 ping
命令每隔 3 秒钟尝试 ping 一次目标地址,直到能够成功 ping 通为止,然后退出循环,并开始执行下面的命令。
#!/bin/bash
while ! ping -c1 -w1 "4x.1x8.2x0.xx" &>/dev/null
do
sleep 3
done
systemctl start frpc.service # 这里写启动你上方设置的服务的启动代码
在上述代码中,.service
文件定义了服务的配置,ExecStart
指定了启动服务时需要执行的命令,Restart
制定了服务失败时需要自动重启,WantedBy
指定了在哪些系统级别中需要自动启动该服务。
.sh
文件则定义了等待网络连接的脚本。在这里,while
循环通过 ping
命令测试了指定的 IP 地址是否可以访问。如果无法访问,则暂停 3 秒后重新尝试。当可以访问时,就启动 .service
文件中定义的服务。
注意,为了使 .sh
文件可以在系统启动时自动运行,您需要将其设置为启动脚本并添加到 /etc/rc.local
等文件中。例如,在 /etc/rc.local
文件中添加以下内容,就可以在系统启动时自动启动该脚本:
/path/to/wait-for-network.sh &
在上述代码中,/path/to/wait-for-network.sh
应替换为您实际存放 .sh
文件的路径。&
符号用于让该脚本以后台进程的方式启动。
假设你的脚本在/opt/module/frpc/start.sh
下使用以下代码
bash /opt/module/frpc/start.sh &
设置开机启动#
您可以通过以下步骤将 /opt/module/frpc/start.sh
设置为开机自启动脚本:
-
使用以下命令编辑
/etc/rc.local
文件:
sudo vim /etc/rc.local
注意,如果您使用的是 Ubuntu 20.04 或 Debian 11 等较新的系统版本,则/etc/rc.local
文件可能已被禁用。在这种情况下,您需要创建一个 systemd 服务单元。 -
在文件的末尾添加以下行:
bash /opt/module/frpc/start.sh &
上述命令的含义是在后台运行/opt/module/frpc/start.sh
脚本。
-
保存并关闭
/etc/rc.local
文件。 -
确保
/opt/module/frpc/start.sh
脚本有执行权限。可以通过以下命令授予其执行权限:
chmod +x /opt/module/frpc/start.sh
arch 系统#
对于 arch 系统你得这么写启动 sh 脚本
sudo vim /lib/systemd/system/frp_start.service
[Unit]
Description=FRP服务启动脚本 # 描述
[Service]
Type=simple
ExecStart=/bin/bash /sh脚本路径/frp_start.sh
[Install]
WantedBy=multi-user.target
写完这个系统服务后使用systemctl enable frp_start.service
就可以了
现在,当您的系统启动时,/opt/module/frpc/start.sh
脚本将自动运行。如果您发现它没有按预期工作,请确保脚本中包含正确的启动和配置命令,并检查系统日志以查看任何与脚本相关的错误消息。
我经过测试发现你需要将 frpc 的系统服务设置开机自启动和 sh 脚本开机自启全都配置好,frpc 启动脚本才可以正常工作,否则会报错或服务无法启动。
所有记得执行 systemctl enable frps
这个命令 具体命令取决于你设置的服务名称