Comment puis-je code un minuteur de surveillance pour redémarrer un service Windows?
Je suis très intéressé par la réponse à une autre question concernant l'watchdog timer " pour les services Windows (voir ici). Cette réponse, a déclaré:
J'ai également utilisé un système de surveillance interne de l'exécution dans un autre thread. Ce thread regarde le thread principal pour une activité comme la sortie du journal ou d'un basculement de l'événement. Si l'activité n'est pas vu alors le service est considéré comme accroché et j'ai arrêté le service.
Dans ce cas, vous pouvez configurer windows afin de redémarrage automatique d'un service arrêté et qui pourrait résoudre le problème (tant que ce n'est pas une logique interne de bug).
Aussi que je travail avec le texte des journaux sont écrits dans un journal. En outre, pour les services qui sont sur le point de "dormir un peu", je me connecte le temps pour le prochain réveil. J'utilise MTAIL de regarder un journal pour la sortie."
Quelqu'un pourrait-il donner un exemple de code comment utiliser un chien de garde interne de l'exécution dans un autre thread, car actuellement j'ai une tâche de développer un service windows qui sera capable de redémarrer en cas d'échec, hung up, etc.
J'apprécie vraiment votre aide.
Que serait droite: aller à droite vers le haut. Ne pas la peine de demander le reste d'entre nous les nuls.
En fait, c'était John Dyer - voir ma mise à jour sur la question.
Bon, maintenant peut-être que la question a été Anglicisé un peu, nous pourrions nous arrêter downvoting et de commencer à répondre 🙂
Ce n' pas appartiennent à de super-utilisateur. C'est précisément demandant comment code un processus de surveillance.
OriginalL'auteur | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas un grand fan de l'exécution d'un chien de garde comme un thread dans le processus que vous regardez. Cela signifie que si l'ensemble du processus se bloque pour une raison quelconque, le chien de garde ne fonctionne pas.
Chiens de garde sont une idée levé à partir du matériel du monde et ils en avaient le droit. Utiliser un circuit externe aussi simple que possible (donc il peut être sensiblement correcte). Typique des chiens de garde simplement lancé une minuterie et, si le processus n'avait pas fait quelque chose avant que le chronomètre a expiré (comme l'accès à un emplacement de mémoire le chien de garde a été de regarder), le tout a été réinitialisé. Lorsque le chien de garde a été "expulsé", il serait redémarrer le chronomètre.
La loi du processus de coups de pied le chien de garde protégée que les processus de synthèse de la résiliation.
Mon conseil serait d'écrire un très simple programme autonome qui vient de surveiller un événement (comme le fichier de mise à jour de temps en cours de modification). Si l'événement ne s'est pas produit dans les délais requis, de tuer le processus d'être regardé (et laissez-le redémarrage de Windows).
Puis ont regardé votre programme périodiquement réécrire ce fichier.
OriginalL'auteur paxdiablo
Vous pouvez configurer dans les propriétés du service à l'auto de redémarrage en cas d'échec
OriginalL'auteur Arsen Mkrtchyan
D'autres approches que vous pourriez envisager d'ailleurs régulièrement la modification de la lastwritetime d'un fichier serait de créer un compteur de performance ou même un objet WMI. Nous ne le plus loin dans notre construction d'infrastructures, le "truc" est de trouver une véritable unité de travail dans le service de surveillance et d'impulsion de votre "battement de coeur" à chaque fois qu'une unité est fini.
L'avantage de WMI ou Perf Compteurs sur une le fichier approche est que vous devenez alors visible pour tout un tas de professionnels de l'EIP /les outils de gestion. Ce qui peut ajouter beaucoup de valeur.
OriginalL'auteur Tom Kirby-Green