Aller au contenu

Problème Script bash


Messages recommandés

Bonjour,

J'ai un petit problème avec un script bash, celui-ci accepte une source mais pas les autres.

Je n'arrive pas à trouver d'où vient le problème.

Voici donc le script :

PATH=/bin:/usr/bin:/sbin:/usr/sbin	

USER=user
case "$1" in
$1)
if [ -e $1.cfg ];
source $1.cfg
then
		  case "$2" in
	   start)
			 if [[ `su $USER -c "screen -ls |grep $NAME"` ]]
			then
			echo "$DESC is already running!"
			 else 
			echo "Starting $DESC"
			su $USER -c "cd $DIR; screen -dmS $NAME ./$DAEMON $PARAMS"
			 fi
			;;

	   stop)
			 if [[ `su $USER -c "screen -ls |grep $NAME"` ]]
			then
		echo -n "Stopping $DESC"
		kill `ps auxwww | grep -v grep | grep -i $USER | grep -i screen | grep -i $NAME | awk '{print $2}'`
		echo " ... done."
		 else
			echo "Coulnd't find a running $DESC"
			 fi
		;;

	   restart)
			 if [[ `su $USER -c "screen -ls |grep $NAME"` ]]
			then
		echo -n "Stopping $DESC"
		kill `ps auxwww | grep -v grep | grep -i $USER | grep -i screen | grep -i $NAME | awk '{print $2}'`
		echo " ... done."
			 else
			echo "Coulnd't find a running $DESC"
		 fi
			echo -n "Starting $DESC"
		su $USER -c "cd $DIR; screen -dmS $NAME ./$DAEMON $PARAMS"
		echo " ... done."
		;;

	   status)
			 ps aux | grep -v grep | grep $NAME > /dev/null
			 CHECK=$?
		 [ $CHECK -eq 0 ] && echo "$DESC is UP" || echo "$DESC is DOWN"
		;;

	   *)
			 echo "Usage: $0 $1 {start|stop|status|restart}"
		  esac
else
   echo "Error service name dismatch"	
fi
  ;;   

*)
echo "Usage: $0 $1 {start|stop|status|restart}"
exit 1
  ;;

esac

exit 0

Le script load les sources .cfg qui sont sous cette forme :

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=service3
DIR=/home/user/.../.../
DAEMON=service_run
PARAMS=".........."
DESC="Service No 3"

En gros voilà ce qui se passe quand j'execute le script :

Le script load donc service3.cfg

~$ ./Load.sh service3 start
~$ Service No 3 is already running!
~$ ./Load.sh service3 status
~$ Service No 3 is UP

Bon là le service est déjà lancé donc normal.

Maintenant avec un autre service.

Le script load service7.cfg

~$ ./Load.sh service7 start
~$ Starting Service No 7
~$ : Aucun fichier ou répertoire de ce types_l
~$ ./Load.sh service7 status
~$ is DOWNNo 7

Pour résumer le script fonctionne pour service3 mais refuse de se lancer pour tous les autres.

Ce doit être un truc tout con qui cloche malheureusement mes compétences s'arrêtent là.

Merci d'avance. :yes:

Lien vers le commentaire
Partager sur d’autres sites

tu pourrais nous donner la desriptif de service 7? savoir s'il y a pas un espace qui traine ou qqch comme ça

sinon, une ch'tite astuce : regarde du côté de pgrep plutôt que ps | grep -v | ...

Service 7 est quasiment pareil que le 3.

Ce qui diffère :

NAME=service7 au lieu de 3
DIR=/home/user/SerViCe2/service_run au lieu de SerViCe
DESC="Service No 7" au lieu de 3

Encore la cfg serait différente mais c'est même pas le cas, bizarre cette histoire.

Lien vers le commentaire
Partager sur d’autres sites

		   start)
			 if [[ `su $USER -c "screen -ls |grep $NAME"` ]]
			then
			echo "$DESC is already running!"
			 else 
			echo "Starting $DESC"

~$ Starting Service No 7

jusque là ça correspond...

				su $USER -c "cd $DIR; screen -dmS $NAME ./$DAEMON $PARAMS"

~$ : Aucun fichier ou répertoire de ce types_l

ça serait pas le "cd" qui n'est pas content?

Et ce serait bien d'avoir la sortie exacte du programme, parce que là le "~$" on ne sait pas trop ce que c'est... un prompt?

Lien vers le commentaire
Partager sur d’autres sites

		   start)
			 if [[ `su $USER -c "screen -ls |grep $NAME"` ]]
			then
			echo "$DESC is already running!"
			 else 
			echo "Starting $DESC"

~$ Starting Service No 7

jusque là ça correspond...

				su $USER -c "cd $DIR; screen -dmS $NAME ./$DAEMON $PARAMS"

~$ : Aucun fichier ou répertoire de ce types_l

ça serait pas le "cd" qui n'est pas content?

Et ce serait bien d'avoir la sortie exacte du programme, parce que là le "~$" on ne sait pas trop ce que c'est... un prompt?

Oui oui ~$ prompt :craint:

Tu penses que c'est "cd" qui fout la merde alors :craint:

Sinon à part ça il n'y a pas un soucis de mon script genre des "exit" qui manquent etc... Je suis vraiment désolé mais je ne suis pas expert dans ce domaine, je n'ai fait que me baser sur d'autre script et me renseigner sur Google.

Ce que j'attends de mon script c'est tout con :

./Load.sh bidule start

"Error service name dismatch" vu que bidule ne correspond pas à bidule.cfg

./Load.sh service1 start

"Starting service1" lancement OK vu que service1 correspond à service1.cfg qui contient les paramètres $NAME, $DIR, $DESC, ....

Il doit y avoir plus simple et plus propre que ce que j'ai pondu mais sans les connaissances on fait avec les moyens du bord. :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Oui oui ~$ prompt :craint:
C'est bizarre un prompt en face d'une ligne de sortie standard, normalement les prompts c'est seulement avant les commandes que l'on tape soi-même :transpi:
Tu penses que c'est "cd" qui fout la merde alors :transpi:
C'est possible oui.
Sinon à part ça il n'y a pas un soucis de mon script genre des "exit" qui manquent etc... Je suis vraiment désolé mais je ne suis pas expert dans ce domaine, je n'ai fait que me baser sur d'autre script et me renseigner sur Google.

Ce que j'attends de mon script c'est tout con :

./Load.sh bidule start

"Error service name dismatch" vu que bidule ne correspond pas à bidule.cfg

./Load.sh service1 start

"Starting service1" lancement OK vu que service1 correspond à service1.cfg qui contient les paramètres $NAME, $DIR, $DESC, ....

Il doit y avoir plus simple et plus propre que ce que j'ai pondu mais sans les connaissances on fait avec les moyens du bord. :craint:

J'ai pas bien compris ce que vient faire screen dans tout ça... C'est pour lancer les services en arrière-plan sans qu'ils s'arrêtent au logout !?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...