Position actuelle: Accueil> Derniers articles> Comment enregistrer le service socket_accept () en tant que démon de fond Linux

Comment enregistrer le service socket_accept () en tant que démon de fond Linux

M66 2025-05-28

socket_accept () est un moyen courant de gérer les connexions de socket lors de la programmation des réseaux à l'aide de PHP. Cependant, il ne s'exécute pas automatiquement en tant que démon et doit être configuré pour être stable sous la forme de processus d'arrière-plan dans Linux. Cet article présentera comment enregistrer un script PHP contenant socket_accept () en tant que démon de fond Linux pour s'assurer qu'il s'exécute en continu, redémarre automatiquement et a de bonnes capacités de gestion de journaux.

1. Préparez votre script de service PHP Socket

Tout d'abord, vous avez besoin d'un script côté serveur de base de socket. Voici un exemple PHP simple pour le serveur TCP:

 <?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); // éviterCPUOccupation trop élevée
        continue;
    }

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

socket_close($socket);

2. Créez un démarreur de démon

Pour le transformer en un démon en cours d'exécution, vous devez "sortir manuellement du terminal". Un moyen courant consiste à utiliser PHP pour implémenter le mode démon, ou plus souvent, SystemD avec Linux.

Utiliser Systemd pour enregistrer les démons

  1. Enregistrer les scripts PHP <br> En supposant que votre script est nommé /usr/local/bin/php_socket_server.php , assurez-vous que le fichier est exécutable:

 chmod +x /usr/local/bin/php_socket_server.php
  1. Créer un fichier d'unité de service Systemd <br> Ajoutez le contenu suivant à /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. Activer et démarrer le service

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

De cette façon, votre service de socket s'exécutera automatiquement lorsque le système commencera et redémarrera automatiquement lorsque la sortie anormale sera éliminée.

3. Vérifiez l'état de course du démon

Vous pouvez vérifier l'état du service à l'aide de la commande suivante:

 sudo systemctl status php-socket.service

Afficher les informations du journal:

 journalctl -u php-socket.service -f

4. Empêcher les processus et les ressources de zombies de fuir

Dans les services de socket de base de longue durée, la manipulation des exceptions raisonnables est très critique. Il est recommandé de faire des retards appropriés pour que socket_accept return et surveiller le journal pour les erreurs fréquentes.

5. Activer l'écoute du nom de domaine et proxy inversé (facultatif)

Si vous souhaitez fournir des services au monde extérieur via des noms de domaine tels que m66.net , vous pouvez cartographier le port vers le service correspondant en combinaison avec Nginx ou un autre logiciel proxy inversé. Par exemple: