設置 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
這個命令 具體命令取決於你設置的服務名稱