Question Définition d'un script PHP en tant que service Windows


Je dois configurer un script PHP en tant que service Windows.

J'en ai besoin pour s'exécuter quel que soit l'utilisateur connecté et au démarrage du système. Cela ressemble à un service Windows, mais je suis heureux d'entendre d'autres suggestions.

(Ce script s'exécute en continu, ce n'est pas une opération "à exécuter toutes les 5 minutes" pour laquelle je pourrais utiliser le Gestionnaire de tâches planifiées.)

http://support.microsoft.com/kb/251192 couvre l'utilisation du programme sc.exe pour installer votre service.

Mais d'après ce que j'ai lu, j'ai besoin d'un wrapper autour du script PHP pour accepter les commandes spéciales du gestionnaire de services Windows. Quelqu'un peut-il aider avec cela?


17
2018-05-10 15:27


origine


Réponses:


Peut-être le Outils du kit de ressources (spécifiquement srvany.exe) peut vous aider ici. MSDN: Comment créer un service défini par l'utilisateur et possiblement cet indice pour 2008 Server devrait vous aider à configurer tout exécutable en tant que service. (Je l'ai utilisé avec succès sur Windows 2003 Server, Windows 2008 Server et Windows XP Professionnel [autre Kit de ressources, cependant])

Vous créez une chauve-souris contenant php your-script.php, enveloppez-le avec srvany.exe et le tour est joué, le script est démarré une fois que la machine charge les services.

srvany.exe devrait gérer les appels de démarrage / arrêt / redémarrage que vous attendez d'un démon à exécuter. Il chargerait votre exécutable au démarrage, éteindrait le processus à l’arrêt, ferait les deux au redémarrage. Donc, vous n'avez pas à vous soucier de cette partie. Vous voudrez peut-être vérifier si un register_shutdown_function () peut aider à identifier quand votre processus de service est tué.

Vous pouvez même définir des dépendances par rapport à d'autres services (par exemple, une base de données ou d'autres).

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\THENAMEOFYOURSERVICE]
"DependOnService"="DEPENDONTHIS"

remplacer THENAMEOFYOURSERVICE avec le nom que vous avez donné à votre service et DEPENDONTHIS avec le nom du service à dépendre (par exemple "Postgres9.0" ou autre). Enregistrez ce fichier dans dependency.reg et le charger avec regedit /s dependency.reg. (Ou double-cliquez dessus dans l'explorateur ...)


12
2017-10-29 14:59



Nous avons utilisé FireDaemon pour cette tâche, il n’a pas besoin de scripts wrapper, etc. Malheureusement, ce n’est pas un logiciel gratuit.


3
2018-05-10 15:54



Vous pouvez exécuter php sur la ligne de commande en donnant différents paramètres ainsi que le fichier-script en paramètre. Si vous ajoutez toute la ligne dont vous avez besoin dans la configuration du service, elle doit s'exécuter. Vous pouvez donc également essayer l'appareil avant de créer le service. Si le script php est en dehors de votre route Web, vous devriez peut-être ajouter le dossier à la variable PATH de Windows.


2
2017-10-29 14:32



Je l'ai trouvé mais je ne l'ai pas essayé moi-même. PHP est livré avec quelques fonctions pour ce faire: http://uk.php.net/manual/en/book.win32service.php

Voici quelques exemples: http://uk.php.net/manual/en/win32service.examples.php

<?php
if ($argv[1] == 'run') {
  win32_start_service_ctrl_dispatcher('dummyphp');

  while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
    # do your work here.
    # try not to take up more than 30 seconds before going around the loop
    # again
  }
}
?>

1
2018-01-02 17:01



Après quelques jours ... j'ai trouvé cette magnifique option!

Il construit un fichier .exe qui reçoit les options de service et fonctionne correctement!

https://superuser.com/questions/628176/php-cgi-exe-as-a-windows-service/643676#643676

la commande correcte:

sc crée FOO binPath = "service.exe \" C: \ php \ php-cgi.exe -b   127.0.0.1:9000 -c C: \ php \ php.ini "\" type = propre start = erreur automatique = ignore DisplayName = "FOO php"


0
2017-09-04 21:55