현재 위치: > 최신 기사 목록> 더 나은 프로세스 제어 및 자동 재시작을 달성하기 위해 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 (Systion Log)에 출력됩니다.

  • 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-Socket-Server 식별자를 필터링하여 로그의보기를 용이하게하는 것이 좋습니다.

  • 보안 : 실제 요구에 따라 방화벽 규칙을 설정하면 신뢰할 수있는 IP만이 포트에 액세스 할 수 있습니다.

  • 서비스 권한 : SystemD 서비스 파일의 사용자그룹 필드를 구성하여 루트로 실행되지 않고 보안을 향상시킬 수 있습니다.

  • 코드 견고성 : 서비스 스크립트에 신호 처리 (예 : PCNTL_Signal )를 추가하여 우아한 종료를 달성합니다.