Bonjour à tous,
j'ai fais un script qui contrôle le status de mon service, et si mon service est arrêter, il le relance, le problème c'est qu'il ne fonctionne pas, et je ne trouve pas le problème
!/bin/bash
Module name
PS=$1
status()
{
/etc/init.d/${PS} status
}
start()
{
/etc/init.d/${PS} start
}
status
if [$? -ne 0]; then
logguer "Processus ${PS} not started"
start
fi
Si quelqu'un aurait une idée,
Merci d'avance,
Franck
# case $1 in
Posté par nek . Évalué à -1.
Bonjour,
Il me semble qu´il manque la un case.
Tu définis des fonctions qui ne seront jamais appellées.
Voici le premier lien sur lequel je suis tombé comprenant un exemple :
http://www.novell.com/coolsolutions/feature/15380.html
[^] # Re: case $1 in
Posté par skank75 . Évalué à 1.
Merci pour le lien, mais je débute sous linux et je ne comprend pas trop
# [ est une commande
Posté par gaaaaaAab . Évalué à 3.
"ça ne fonctionne pas", c'est un peu juste. Prend l'habitude de décrire plus précisément ce qui ne marche pas, les éventuels messages affichés par ton script, etc.
sinon, là, si tu as copié/collé ton script tel quel, il faut que tu rajoutes quelques espaces pour bien séparer les différents éléments du test.
essaie aussi d'indenter ton code, ça le rend plus lisible.
devient
[^] # Re: [ est une commande
Posté par skank75 . Évalué à 1.
Merci gaaaaaAab une nouvelle fois, je vais essayer de faire de mon mieux.
En faite quand je dis qu'il ne fonctionne pas, il fonctionne mais pas de la façon dont je voudrais.
Quand je lance mon script si mon service passé en paramètre est démarré, il me répond:
"${PS} (mon_service) is running"
Mais si il est éteint, il me répond:
"${PS} (mon_service) is not running"
...et il s'arrête
Normalement, si il le voit "down", il est censé faire un start de celui-ci, mais il ne le fais pas.
[^] # Re: [ est une commande
Posté par gaaaaaAab . Évalué à 3.
c'est ton script de service dont tu parlais là : http://linuxfr.org/forums/programmationshell/posts/contr%C3%B4le-de-lutilisateur-dans-un-shell-de-service qui t'affiche ça ?
Vérifie que ton script de démarrage de service renvoie bien quelque chose différent de 0 sur la commande status quand ton service est arrété, sinon, $? vaut toujours 0, et tu ne passes jamais dans le start.
[^] # Re: [ est une commande
Posté par skank75 . Évalué à 1.
Nan, en fait je veux faire watchdog (pour le mettre dans le crontab de mon utilisateur) qui vérifie justement mon service en lançant le script de service que j'ai créé hier (compliqué!!)
[^] # Re: [ est une commande
Posté par gaaaaaAab . Évalué à 2.
je pense avoir déjà fait des trucs plus complexes que ça ;) il me semble que j'ai compris.
ce que je dis, c'est pour que ton script de watchdog (que tu es en train d'écrire) effectue une action en fonction de l'état du service, il faut que ton script de service dans /etc/init.d/ton_service status renvoie des valeurs différentes selon que le service est démarré ou pas.
donc, pour reformuler ma question, quand ton service est arrété, est-ce que /etc/init.d/ton_service renvoie bien une valeur différente de 0 ?
[^] # Re: [ est une commande
Posté par skank75 . Évalué à 1.
:), c'est compliqué mais pour moi!!
Pour répondre à ta question, oui si le script est arrête la valeur renvoyée est différente de 0.
Je n'arrive pas dans watchdog à récupérer la valeur de la commande /etc/init.d/mon_service status pour qu'en fonction de cette valeur, je relance ou non le service
[^] # Re: [ est une commande
Posté par gaaaaaAab . Évalué à 2.
ça viendra :)
bizarre, à la lecture, il n'y a rien qui me saute aux yeux.
Si tu es en bash, tu peux ajouter, vers le début de ton script:
set -x
bash passe en mode debug et affiche le déroulement du script.
attention aussi au piège classique, cron démarre les jobs avec /bin/sh
si tu veux utiliser un autre shell, la première ligne du script doit être le chemin vers l'interpréteur. Par exemple, pour bash :
juste pour savoir, tu essaies déjà de mettre ton script en cron ou tu le testes à la main pour l'instant ?
[^] # Re: [ est une commande
Posté par skank75 . Évalué à 1.
Merci de ta réponse, je test mon script à la main
voilà l'erreur que j'ai quand je l'éxécute:
watchdog.sh: line 17: [: missing `]'
La ligne 17 correspond à celle du if
[^] # Re: [ est une commande
Posté par gaaaaaAab . Évalué à 2.
tu as du zappé un des espaces dont je parlais là
[^] # Re: [ est une commande
Posté par skank75 . Évalué à 0.
Ok merci, je pense que le problème vient de mon service qui ne retourne pas 0 (je ne suis plus trop sur de mon code du coup!!)
Source function library.
. /etc/init.d/functions
case $1 in
start)
su - mvas -c /appi/"appi.sh start"
exit 0
;;
stop)
su - mvas -c /appi/"appi.sh stop"
exit 1
;;
restart)
su - mvas -c /appi/"appi.sh restart"
;;
status)
su - mvas -c /appi/"appi.sh status"
;;
esac
exit $?
# Petite remarque
Posté par Marotte ⛧ . Évalué à 1.
Désolé mais ça pique les yeux.
Je pense pas que ce soit le problème mais tu as écrit
alors que c'est
Et sinon, que vient faire
dans la choucroute ?
Désolé de pas pouvoir aider plus. Je suis surpris qu'une /etc/init.d/truc status ne renvoie pas 0 quelque soit l'état du service. Que le service soit arrêté n'est pas une erreur dans le script. Il faut peut-être que tu parses la sortie (exemple : s'il y a la chaîne "not started" alors on redémarre le service)
[^] # Re: Petite remarque
Posté par Marotte ⛧ . Évalué à 1.
Et c'est tous les jours comme ça... J'ai encore écrit trop vite, visiblement les scripts renvoient bien un code > 0 quand le status est "not running"
En tous cas j'ai regardé celui de atd.
# Résolu
Posté par skank75 . Évalué à 1.
Merci à tous pour vos réponses,
j'ai résolu mon problème, c'était bien par rapport à la valeur de sortie que me renvoyer mon service quand il était éteint, il était effectivement à 0.
Donc mon watchdog ne détectait pas d'anomalie !! :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.