Comment vérifier si un script php est toujours en cours d'exécution
J'ai un PHP
script qui écoute sur une file d'attente. Théoriquement, il n'est jamais censé mourir. Est-il quelque chose pour vérifier si il est encore en cours? Quelque chose comme Ruby's God ( http://god.rubyforge.org/)
pour PHP
?
Dieu est la langue agnostique, mais il serait agréable d'avoir une solution qui fonctionne sur windows ainsi.
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème - qui veulent vérifier si un script est en cours d'exécution. Donc, je suis venu avec cela, et je l'exécute une tâche cron. Il saisit le processus en cours d'exécution comme un tableau et des cycles bien que chaque ligne et contrôles pour le nom de fichier. Semble bien fonctionner. Remplacez #user# avec votre script de l'utilisateur.
Dans linux, exécutez ps comme suit:
Vous pourriez faire dans un script php:
Le code ci-dessus répertorie tous les processus php course en plein, puis vérifie si "my_script.php" est dans la liste des processus en cours d'exécution, si ce n'est qu'il s'exécute le processus et de ne pas attendre la fin du processus de continuer à faire ce qu'il faisait.
Simplement ajouter une deuxième commande après le script. Quand/si elle s'arrête, la deuxième commande est invoquée. Ex.:
Edit:
Techniquement, cela invoque le mailer, tout de suite, mais seulement remplit la commande lorsque le script php se termine. Faire cette capture de la sortie du script php et inclut dans le corps du mail, ce qui peut être utile pour le débogage de ce qui a causé le script de s'arrêter.
Simple script bash
Pas pour windows, mais...
J'ai un couple de longue durée d'exécution des scripts PHP, qui ont un script shell en l'enveloppant. Vous pouvez éventuellement retourner une valeur dans le script qui sera vérifié dans le shell-script pour quitter, redémarrer immédiatement, ou dormir pour quelques secondes, puis redémarrez.
Voici un exemple simple qui ne cesse de courir le script PHP, jusqu'à ce qu'il est arrêté manuellement.
La "exec $0" relance le script, sans la création d'un sous-processus qui devra démêler plus tard (et de prendre des ressources dans le temps). Ce script bash enroule une messagerie de l'expéditeur, il n'est donc pas un problème si elle sort et s'arrête un moment.
Vous pouvez écrire dans votre crontab quelque chose comme ceci:
Votre test.php fichier devrait ressembler à ceci:
Cette façon, vous aurez plus qu'un seul instace de la tâche cron avec
my-special-cron
comme un processus clé. De sorte que vous pouvez ajouter plus d'emplois dans le même fichier php.test.php system_send_emails sendEmails
test.php system_create_orders orderExport
Une solution possible est celle de l'écoute sur un port à l'aide de la prise de fonctions. Vous pouvez vérifier que le support est toujours à l'écoute avec un simple script. Même un service de surveillance comme pingdom pourrait contrôler son état. S'il meurt, le support n'est plus à l'écoute.
Beaucoup de solutions.. Bonne chance.
Si vous avez vos mains sur le script, vous pouvez simplement lui demander de définir une valeur de temps tous les X temps en db, et puis laissez un cron job vérifier si cette valeur est à jour.
troelskn a écrit:
Cela appel
mail
chaque fois qu'une ligne est imprimée dans daemon.php (ce qui ne devrait être jamais, mais quand même.)Au lieu de cela, utiliser le double esperluette opérateur de séparer les commandes, c'est à dire
Inspiré de Justin Levene de la réponse et de l'améliorer en tant que
ps -C
ne fonctionne pas sous Mac, dont j'ai besoin dans mon cas. De sorte que vous pouvez l'utiliser dans un script php (peut-être juste avant vous avez besoin démon vivant), testé sous Mac OS X 10.11.4. de & Ubuntu 14.04:Petite mais utile détail: Pourquoi
grep -c '[p]hp ...'
au lieu degrep -c 'php ...'
?Parce que tout en comptant le processus
grep -c 'php ...'
sera compté comme un processus qui s'inscrit dans notre modèle. Donc, en utilisant une expression régulière pour la première lettre de php rend notre commande différent du modèle de recherche.Si vous avez de la difficulté à vérifier pour le script PHP directement, vous pouvez faire un trivial emballage et vérifier qu'. Je ne suis pas suffisamment familier avec Windows script pour mettre comment c'est fait ici, mais en Bash, il aurais l'air...
wrapper_for_test_php.sh
Alors vous devriez juste vérifier pour le wrapper comme vous le feriez pour vérifier toute autre script bash: pidof -x wrapper_for_test_php.sh
J'ai utilisé cmder pour windows et basé sur ce script, je suis venu avec ce que j'ai réussi à déployer sur linux plus tard.