Configurer des actions de récupération à exécuter en cas d'échec d'un service

10

J'ai installé plusieurs de nos services écrits personnalisés sur des boîtes Windows (peu importe si XP, Server, Vista). Je configure toujours pour "Redémarrer le service" sur les 1er, 2ème et échecs suivants. Mais je n'ai jamais vu ce travail; le service s'arrête simplement (à cause d'une erreur ou de quelque chose dans le code) mais ne redémarre pas.

Je viens de remarquer la case à cocher "Activer les actions pour les arrêts avec erreurs". Doit-il être vérifié pour que la récupération prenne effet si l'échec a été causé par une erreur?

merci, Mark.

M Schenkel
la source

Réponses:

3

Si vos services s'arrêtent en raison d'une erreur, qui est enregistrée par Windows, alors oui, vous devez cocher «Activer les actions pour les arrêts avec erreurs», sinon cela ne fonctionnera pas.

Si vous ne cochez pas cette case, cela ne redémarrera que les services qui se sont arrêtés pour des raisons légitimes ou inconnues.

Sam Cogan
la source
1
Merci - j'ai un peu compris cela. Mais j'aurais pensé que "Erreur" serait la même chose qu'un "échec", et donc le service aurait dû démarrer sans cocher la case.
M Schenkel
Cela semble un peu étrange, je suis d'accord, car la plupart des raisons pour lesquelles un service échouerait, vous penseriez que ce serait une erreur.
Sam Cogan
2
Aucune action de récupération ne doit jamais être déclenchée sur des services qui se sont arrêtés pour des raisons "légitimes". Cette réponse crée toujours de la confusion sur les termes «arrêt» et «échec».
matpop
3
Quiconque chez Microsoft qui a écrit ce langage devrait être sans cesse flagellé pour son incompétence.
Brain2000
16

La case à cocher «Activer les actions pour les arrêts avec erreurs» a été introduite avec Windows Vista et Windows Server 2008, fournissant une seule ligne de documentation embarrassante :

Sélectionnez Activer les actions pour les arrêts avec erreurs afin de déclencher les actions de récupération que le service a arrêtées avec une erreur.

Le SC.exe programme a été également mis à jour pour fournir une nouvelle commande: failureflag. La documentation montre un mauvais exemple et ne s'applique pas vraiment à Windows Server 2003, mais nous indique que la commande:

Spécifie si des actions de récupération seront déclenchées lorsqu'un service s'arrête suite à une erreur.

Ainsi, la case à cocher et sc failureflagsont utilisées pour définir le même indicateur.
Tapons sc failureflagdans l'invite de commande, nous obtenons enfin une description assez décente:

Modifie le paramètre d'indicateur d'actions d'échec d'un service. Si ce paramètre est 0 (par défaut), le Gestionnaire de contrôle des services (SCM) active les actions d'échec configurées sur le service uniquement si le processus de service se termine avec le service dans un état autre que SERVICE_STOPPED. Si ce paramètre est 1, le SCM active les actions d'échec configurées sur le service si le service entre dans l'état SERVICE_STOPPED avec un code de sortie Win32 différent de 0 en plus de l'arrêt du processus de service comme ci-dessus. Ce paramètre est ignoré si le service n'a aucune action d'échec configurée.

Une description similaire peut être trouvée ici .
Ainsi, la bonne réponse à la question d'origine est: les actions de récupération configurées prennent toujours effet lorsque votre service ne se termine pas dans l'état SERVICE_STOPPED. "Activer les actions pour les arrêts avec erreurs" doit être coché si vous devez activer les actions de récupération également lorsque votre service entre dans l'état SERVICE_STOPPED, à condition que le code de sortie ne soit pas 0 (erreur).

matpop
la source
2
Bravo pour une réponse très utile!
Tim Lovell-Smith