現在の位置: ホーム> 最新記事一覧> socket_accept()サービスをLinuxの背景デーモンとして登録する方法

socket_accept()サービスをLinuxの背景デーモンとして登録する方法

M66 2025-05-28

Socket_accept()は、PHPを使用してネットワークをプログラミングするときにソケット接続を処理する一般的な方法です。ただし、それ自体はデーモンとして自動的に実行されず、Linuxのバックグラウンドプロセスの形で安定するように構成する必要があります。この記事では、socket_accept()を含むphpスクリプトをLinuxバックグラウンドデーモンとして登録して、継続的に実行し、自動的に再起動し、優れたログ管理機能を備えていることを確認する方法を紹介します。

1. PHPソケットサービススクリプトを準備します

まず、基本的なソケットサーバー側のスクリプトが必要です。 TCPサーバーの単純なPHP例を次に示します。

 <?php

$host = '0.0.0.0';
$port = 12345;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "Server started on {$host}:{$port}\n";

while (true) {
    $client = @socket_accept($socket);
    if ($client === false) {
        usleep(100000); // 避けるCPU占有が高すぎる
        continue;
    }

    $message = "Hello from server at m66.net\n";
    socket_write($client, $message, strlen($message));
    socket_close($client);
}

socket_close($socket);

2。デーモンのスターターを作成します

それをデーモンランニングに変えるには、手動で「ターミナルから抜け出す」必要があります。一般的な方法は、PHPを使用してデーモンモード、またはより一般的にLinuxを使用したSystemDを実装することです。

SystemDを使用してDaemonsを登録します

  1. phpスクリプトを保存<br> スクリプトが/usr/local/bin/php_socket_server.phpという名前であると仮定すると、ファイルが実行可能であることを確認してください。

 chmod +x /usr/local/bin/php_socket_server.php
  1. SystemDサービスユニットファイルを作成<BR> 次のコンテンツを/etc/systemd/system/php-socket.serviceに追加します。

 [Unit]
Description=PHP Socket Server
After=network.target

[Service]
ExecStart=/usr/bin/php /usr/local/bin/php_socket_server.php
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=php-socket-server
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target
  1. サービスを有効にして開始します

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

これにより、システムが起動するとソケットサービスが自動的に実行され、異常な出口が排除されると自動的に再起動します。

3.デーモンの実行ステータスを確認します

次のコマンドを使用して、サービスステータスを確認できます。

 sudo systemctl status php-socket.service

ログ情報を表示:

 journalctl -u php-socket.service -f

4.ゾンビのプロセスとリソースが漏れないようにします

長期にわたるバックグラウンドソケットサービスでは、合理的な例外処理が非常に重要です。 socket_acceptがfalseを返すために適切な遅延を行い、頻繁なエラーについてログを監視することをお勧めします。

5.ドメイン名のリスニングとリバースプロキシを有効にする(オプション)

M66.NETなどのドメイン名を介して外界にサービスを提供する場合は、NGINXまたは他の逆プロキシソフトウェアと組み合わせて、対応するサービスにポートをマッピングできます。例えば: