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 スクリプトを作成する#
アドレスを ping して、ping が成功したらサービスの起動スクリプトを再実行するために、sh スクリプトを作成できます。
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
コマンドは、指定した IP アドレスに対して 3 秒ごとに 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
ループが指定した IP アドレスに対してping
コマンドを使用してアクセスできるかどうかをテストしています。アクセスできない場合は、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 Linux システム#
Arch Linux システムでは、次のように起動 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 スクリプトの両方を起動時に自動的に設定する必要があることがわかりました。そうしないと、エラーが発生したり、サービスが起動しないことがあります。
systemctl enable frps
コマンドを実行することを忘れないでください。具体的なコマンドは、設定したサービス名によって異なります。