現在の位置: ホーム> 最新記事一覧> より良いプロセス制御と自動再起動を実現するために、SystemDのPHPでSocket_Accept()関数サービスを実行するにはどうすればよいですか?

より良いプロセス制御と自動再起動を実現するために、SystemDのPHPでSocket_Accept()関数サービスを実行するにはどうすればよいですか?

M66 2025-07-04

まず、特定のポートに耳を傾け、接続を受け入れ、簡単に応答する単純なPHPソケットサービススクリプトが必要です。

 <?php
// 作成する TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() 失敗: " . socket_strerror(socket_last_error()) . "\n");
}

// アドレスとポートをバインドします
$address = "0.0.0.0";
$port = 12345;
if (socket_bind($socket, $address, $port) === false) {
    die("socket_bind() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// 接続を聞いてください
if (socket_listen($socket, 5) === false) {
    die("socket_listen() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "サービスが開始されました,ポートを聞いてください $port\n";

// ループでクライアント接続を受信します
while (true) {
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $message = "Connectへようこそ m66.net PHP Socket 仕える!\n";
    socket_write($clientSocket, $message, strlen($message));

    socket_close($clientSocket);
}

socket_close($socket);
?>

このスクリプトは、マシンの12345ポートに耳を傾け、クライアント接続を受け入れ、ウェルカムメッセージを送信してから接続を閉じます。

2。SystemDサービスユニットファイルを作成します

上記のPHPスクリプトが/usr/local/bin/php-socket-server.phpとして保存されていると仮定すると、それを管理するためにSystemDサービスファイルを記述する必要があります。

  1. 新しいサービスファイル/etc/systemd/system/php-socket-server.serviceを作成します。コンテンツは次のとおりです。

 [Unit]
Description=PHP Socket 仕える
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/php /usr/local/bin/php-socket-server.php
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=php-socket-server

[Install]
WantedBy=multi-user.target

説明:

  • execStartシステムのPHPインタープリターを使用してスクリプトを実行するスタートアップコマンドを指定します。

  • 再起動=常にクラッシュ後にサービスが自動的に再起動することを保証します。

  • RestArtSec = 5は、再起動の5秒間隔を指します。

  • StandardOutputStandardErrorはどちらもシステムログ(syslog)に出力され、簡単にトラブルシューティングが行われます。

  • syslogidentifierは、ログ識別子を設定します。

3.サービスを有効にして開始します

次のコマンドを実行して、サービスを有効にして開始します。

 sudo systemctl daemon-reload
sudo systemctl enable php-socket-server.service
sudo systemctl start php-socket-server.service

サービスのステータスを確認してください:

 sudo systemctl status php-socket-server.service

サービスが正常に実行されている場合は、TelnetまたはNetCatを使用してテストに接続できます。

 telnet 127.0.0.1 12345

ウェルカムメッセージを見る必要があります:

 Connectへようこそ m66.net PHP Socket 仕える!

4。最適化の提案

  • ログ管理:PHPスクリプトにロギング機能を追加するか、 RSySlogを使用してPHPソケットサーバー識別子をフィルタリングしてログの表示を容易にすることをお勧めします。

  • セキュリティ:実際のニーズに応じてファイアウォールルールを設定し、信頼できるIPのみがこのポートにアクセスできます。

  • サービス許可:SystemDサービスファイルのユーザーグループフィールドを構成して、ルートとして実行し、セキュリティを改善しないようにすることができます。

  • コードの堅牢性:信号処理( PCNTL_SIGNALなど)を追加してスクリプトに追加して、エレガントなシャットダウンを実現します。