2010-04-14 7 views
11

J'ai un script qui écoute un serveur jabber et répond en conséquence. Bien que ce ne soit pas censé s'arrêter, la nuit dernière c'était le cas. Maintenant, je veux lancer un travail cron chaque minute pour vérifier si le script est en cours d'exécution, et le démarrer sinon.Vérifiez si un script php est toujours en cours d'exécution

La question est, comment puis-je vérifier si un script particulier est toujours en cours d'exécution?

Certaines solutions ont été publiées here, mais tout cela est pour Linux, alors que je suis à la recherche d'une solution Windows. Des idées s'il vous plaît? Merci.

Répondre

4

Une solution de contournement rapide et sale pourrait être pour le script de mettre à jour une ligne dans une base de données avec une colonne de date définie sur CURRENT_TIMESTAMP. Avoir le script cron deuxième vérifier si l'horodatage de cette ligne est récente.

+0

je peux utiliser cette solution en dernier recours. Y a-t-il un script shell Windows qui fera l'affaire? – Nirmal

+0

Les scripts shell de Windows sont moins faciles à utiliser que JCL et cela signifie quelque chose, alors j'ai peur de ne pas pouvoir vous aider. Vous pourriez essayer de regarder dans PowerShell bien que cela semble être utile. – Danten

0

Voici ce que je fais habituellement:

  1. créer un répertoire d'état, par exemple:/données/état/
  2. sur mon script, faites la vérifier si le fichier d'état est existe
    1. si elle existe, script de sortie
    2. sinon exister, poursuivre le processus

Cependant, il y a un problème dans ceci: Que faire si le script meurt et qu'il n'a pas supprimé le fichier de statut?

Vous pouvez ajouter un peu de sauvegarde vérifier comme ceci:

  1. Pour chaque minute, mise à jour le fichier d'état
  2. Pour chaque démarrage cron, vérifiez si le fichier d'état est le dernier exemple mis à jour: il y a 10 ou 30 minutes (nous pouvons supposer que notre script cron est mort) nous pouvons commencer script cron.
0

J'ai eu le même problème et je résolus avec ce code:

file_put_contents("status.txt","ping"); 

je l'ai mis dans la boucle de mon script

, je vérifie la date de dernière modification du fichier voir si le script est actif

pour ne pas surcharger le HD que vous pouvez faire quelque chose comme ceci:

$i++ 
if($i%100 == 0) 
    file_put_contents("status.txt","ping"); 

ce fichier va écrire le quand je $ == 100 ou 200 ou 300, etc ...

ceci est une solution de contournement

+0

Comment cela est-il efficace que de mettre à jour un champ d'horodatage dans une base de données? Je pense que la mise à jour d'une base de données est meilleure car elle possède ses propres mécanismes de verrouillage. Considérant que nous pouvons finir dans une impasse si nous dépendons d'un fichier. S'il vous plait corrigez moi si je me trompe. – Nirmal

+0

J'ai exécuté de nombreux scripts sur mon ordinateur portable.Pour accéder à mysql depuis mon bureau, je devrais installer PHP. Cela devient inutile lorsque je travaille avec juste un fichier texte. Mais, chaque cas doit être traité séparément. – Leo

Questions connexes