Position actuelle: Accueil> Derniers articles> Comment exécuter le service de fonction socket_accept () dans PHP dans SystemD pour la gestion afin d'obtenir un meilleur contrôle des processus et un redémarrage automatique?

Comment exécuter le service de fonction socket_accept () dans PHP dans SystemD pour la gestion afin d'obtenir un meilleur contrôle des processus et un redémarrage automatique?

M66 2025-07-04

Tout d'abord, nous avons besoin d'un simple script de service PHP Socket qui écoute un certain port, accepte les connexions et répond simplement.

 <?php
// créer TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() échouer: " . socket_strerror(socket_last_error()) . "\n");
}

// Adresse et port de lier
$address = "0.0.0.0";
$port = 12345;
if (socket_bind($socket, $address, $port) === false) {
    die("socket_bind() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

// Écoutez la connexion
if (socket_listen($socket, 5) === false) {
    die("socket_listen() échouer: " . socket_strerror(socket_last_error($socket)) . "\n");
}

echo "Le service a commencé,Écouter le port $port\n";

// Recevoir des connexions client dans une boucle
while (true) {
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() échouer: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    $message = "Bienvenue pour se connecter m66.net PHP Socket Servir!\n";
    socket_write($clientSocket, $message, strlen($message));

    socket_close($clientSocket);
}

socket_close($socket);
?>

Ce script écoute le port 12345 de la machine, accepte la connexion client, envoie un message de bienvenue, puis ferme la connexion.

2. Créez le fichier d'unité de service Systemd

En supposant que le script PHP ci-dessus est enregistré en tant que /usr/local/bin/php-socket-server.php , nous devons écrire un fichier de service Systemd pour le gérer.

  1. Créez un nouveau fichier de service /etc/systemd/system/php-socket-server.service , avec le contenu comme suit:

 [Unit]
Description=PHP Socket Servir
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

illustrer:

  • ExecStart spécifie la commande de démarrage pour exécuter le script à l'aide de l'interpréteur PHP du système.

  • Redémarrer = s'assure toujours que le service redémarre automatiquement après le crash.

  • RestartSec = 5 fait référence à l'intervalle de redémarrage de 5 secondes.

  • StandardOutput et StandardError sont tous deux sortis du journal système (SYSLOG) pour un dépannage facile.

  • SysLogIdentifier définit l'identifiant de journal.

3. Activer et démarrer le service

Exécutez la commande suivante pour rendre le service à prendre effet et à démarrer:

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

Vérifier l'état du service:

 sudo systemctl status php-socket-server.service

Si le service s'exécute normalement, vous pouvez utiliser Telnet ou NetCat pour vous connecter au test:

 telnet 127.0.0.1 12345

Le message de bienvenue doit être vu:

 Bienvenue pour se connecter m66.net PHP Socket Servir!

4. Suggestions d'optimisation

  • Gestion du journal : il est recommandé d'ajouter la fonction de journalisation dans les scripts PHP ou d'utiliser RSYSLOG pour filtrer l'identifiant PHP-Socket-Server pour faciliter la visualisation des journaux.

  • Sécurité : définissez les règles de pare-feu en fonction des besoins réels, et seuls les IP de confiance sont autorisés à accéder à ce port.

  • Autorisations de service : vous pouvez configurer les champs d'utilisateur et de groupe dans le fichier de service SystemD pour éviter l'exécution de root et améliorer la sécurité.

  • Robustesse du code : ajoutez le traitement du signal (tel que PCNTL_SIGNAL ) pour servir les scripts pour réaliser un arrêt élégant.