banner
xingli

xingli

猫娘爱好者

frpの起動時の自動起動を設定する

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

サービスファイルの作成#

  1. サーバーにログインし、sudo vim /lib/systemd/system/frps.serviceと入力します。これは実際にはroot/lib/systemd/systemに新しいファイル frps.service を作成することです。

  2. ファイルにスクリプトの内容を書き込みます。上記の例を参考にしてください。
    保存して終了すると、サービスが使用可能になります。

  3. その後、frps を起動します。sudo systemctl start frps

  4. 自動起動を有効にします。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を起動時に自動的に実行するには、次の手順を実行します:

  1. 以下のコマンドを使用して/etc/rc.localファイルを編集します:
    sudo vim /etc/rc.local
    なお、Ubuntu 20.04 や Debian 11 などの新しいシステムバージョンを使用している場合、/etc/rc.localファイルが無効になっている可能性があります。その場合は、systemd サービスユニットを作成する必要があります。

  2. ファイルの末尾に次の行を追加します:
    bash /opt/module/frpc/start.sh &
    上記のコマンドは、/opt/module/frpc/start.shスクリプトをバックグラウンドで実行することを意味します。
    image

  3. /etc/rc.localファイルを保存して閉じます。

  4. /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コマンドを実行することを忘れないでください。具体的なコマンドは、設定したサービス名によって異なります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。