Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/04/2015, à 15:57

ezekiel22

Script services au démarrage

Bonjour à tous,
Voila je suis en stage, dans une boite de telecom, et j'ai créer un script qui si on passe en paramètre "start" démarre différent services, on peut également lui passer comme paramètres "stop", "restart" ou alors rien qui aura pour effet de le démarrer.
Maintenant j'essaye de faire qu'il se lance au démarrage, mais ça veut pas big_smile.
J'ai copié mon script dans /usr/bin et dans /etc/init.d, en exécutant la commande "rc-update.d mon_script default " mais ça a pas l'air de changer les choses, j'ai également modifié les priorités au démarrages, à l’arrêt. Mais ça ne fonctionne toujours pas au démarrage.
L’exécution de mon script fonctionne très bien au delà de ça.
Je vous le passe ci dessous:

#!/bin/sh

#Le script suivant va permettre de lancer GenieACS et de l'arreter

start()
{
    echo "start"
    #L'ordre de lancement des services est :
    # -MongoDB (une base de données)
    nohup mongod &
    sleep 2
    # -Redis-Server (un système de gestion de base de données)
    nohup redis-server &
    sleep 2
    # -Démarrage de GenieACS-CWMP (démarre le service d'échange)
    nohup genieacs-cwmp &
    sleep 2
    # -Démarrage de GenieACS-NBI (donne accès à l'API)
    nohup genieacs-nbi &
    sleep 2
    # -Démarrage de GenieACS-FS (permet d'enregistrer les fichiers)
    nohup genieacs-fs &
    # -Démarrage de Rails server (donne accès à l'interface web)
    #On se déplace dans le dossier contenant le service
    cd /opt/genieacs-gui/
    sleep 2
    nohup rails s &
}

stop()
{
    echo "stop"
    #Eteint mongodb
    mongod --shutdown
    #Kill le processus redis-server
    ps -ef | grep redis-server | grep -v grep | awk '{print $2}' |sudo xargs kill -9
    #xargs permet de passer en argument/paramètre d'une commande l'entrée standard
    #Kill les processus genieacs
    ps -ef | grep genieacs | grep -v grep | awk '{print $2}' |sudo xargs kill -9
    #Kill le processus rails s
    ps -ef | grep rails\ s | grep -v grep | awk '{print $2}' |sudo xargs kill -9
   
}

restart()
{
    stop;
    sleep 1;
    start;
}
case $1 in
start)
      start;;
stop)
      stop;;
restart)
      restart;;
*)
      start;;
     
esac
exit 0




PS: Mon premier post sur le site, désolé des fautes.

Hors ligne

#2 Le 22/04/2015, à 17:38

droopy191

Re : Script services au démarrage

Salut,

Je ne suis pas un expert des scripts de démarrage mais il doit manquer des infos à update-rc.d
Les liens sont ils crées dans les dossiers rcX.d

Je pense que ce qui peche sont les entetes du script, exemple pour motd

#!/bin/sh
### BEGIN INIT INFO
# Provides:          motd
# Required-Start:    hostname $local_fs
# Required-Stop:
# Should-Start:
# Default-Start:     1 2 3 4 5
# Default-Stop:
# Short-Description: Create dynamic part of /etc/motd
# Description:       /etc/motd is user-editable and static.  This script
#                    creates the initial dynamic part, by default the
#                    output of uname, and stores it in /var/run/motd.dynamic.
#                    Both parts are output by pam_motd.
### END INIT INFO

Voir /etc/init.d/skeleton pour un exemple de script de démarrage ( pour debian )

Dernière modification par droopy191 (Le 22/04/2015, à 17:39)

Hors ligne

#3 Le 22/04/2015, à 22:44

ezekiel22

Re : Script services au démarrage

J'ai suivi ce que tu as dit droopy191 et j'ai rajouté ce bout de script au début du mien, mais rien n'a changé.
J'ai bien pris soin de vérifier les liens crées et ils sont ok du style K02GenieACS, S99GenieACS.
Mais ça ne fonctionne toujours pas.

Hors ligne

#4 Le 22/04/2015, à 23:07

Sciensous

Re : Script services au démarrage

essaye plutôt d'appeler le script (en +x) avec /etc/rc.local avant le exit 0


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#5 Le 23/04/2015, à 00:26

ezekiel22

Re : Script services au démarrage

Sciensous lorsque tu dis d’appeler le script en +x que veut tu dire ?
J'ai déjà essayer de l’appeler dans /etc/init.d/rc.local en ajoutant la ligne /etc/init.d/GenieACS start, mais ça n'a pas fonctionner, j'ai vérifier il n'y a pas de /etc/rc.local dans le répertoire et les droits sur le script sont 755.

Hors ligne

#6 Le 23/04/2015, à 03:59

Alex10336

Re : Script services au démarrage

le « +x » sous entend un « chmod +x <tonfichier> » ce qui le rend exécutable. Sans ça il ne peut s’exécuter.


« On ne répond pas à une question par une autre question. » (moi ;-) )

Hors ligne

#7 Le 23/04/2015, à 08:49

Sciensous

Re : Script services au démarrage

ezekiel22 a écrit :

Sciensous lorsque tu dis d’appeler le script en +x que veut tu dire ?
J'ai déjà essayer de l’appeler dans /etc/init.d/rc.local en ajoutant la ligne /etc/init.d/GenieACS start, mais ça n'a pas fonctionner, j'ai vérifier il n'y a pas de /etc/rc.local dans le répertoire et les droits sur le script sont 755.

Alex10336 a répondu pour le +x, merci smile
si tes droits sont 755, il faut surement les mettre en 777 pour que root puisse l'executer (j'espère ne pas dire de bétise)
je suis quand même étonné que tu n'aies pas de  /etc/rc.local
peux mettre le contenu de ton /etc/init.d/rc.local ?

édit: ton script est dans /usr/bin donc il te faut mettre /usr/bin/GenieACS start au lieu de /etc/init.d/GenieACS start

Dernière modification par Sciensous (Le 23/04/2015, à 08:51)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#8 Le 23/04/2015, à 09:17

ezekiel22

Re : Script services au démarrage

Ok Sciensous je vais faire ce que tu me dis, mais mon script est dans /etc/init.d et dans /usr/bin.
Sinon voila le contenu de mon /etc/init.d/rc.local :

rc.local a écrit :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO


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

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
    if [ -x /etc/rc.local ]; then
            [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
        /etc/rc.local
        ES=$?
        [ "$VERBOSE" != no ] && log_end_msg $ES
        return $ES
    fi
}

case "$1" in
    start)
    do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac
/usr/bin/GenieACS restart
exit 0

J'ai simplement rajouté les deux dernières lignes, l'appel de on script et un exit 0 car le fichier n'en contenait pas.
Du coup si j'utilise mon script dans /usr/bin dois je relancer la commande "update-rc.d" avec le nouveau chemin du script ?
Et pour les droits en 755 normalement c'est bon car ils octroient les pleins pouvoirs à root, les droits lecture et écriture  aux autres.

Edit: Je viens de faire un chmod +x /usr/bin/GenieACS et désormais j'ai bien quelquechose qui se lance au démarrage, mais seulement mongod et pas tous le service. Je vois pas trop d’où ça peut venir, peut être les sleep pas assez long ? Sachant que dans mon script mongod est le premier à s’exécuter.

Edit 2: Comme j'utilise le nohup j'ai jeté un coup d'oeil dans le log nohup.out, et j'ai trouvé ce qui ne va pas mais je ne vois pas comment le résoudre, j'ai ce problème:

Thu Apr 23 09:03:54.392 [initandlisten] exception in initAndListen: 10310 Unable to lock file: /data/db/mongod.lock. Is a mongod instance already running?, terminating

Sachant que j’écarte l'hypothèse de l'instance qui est déjà exécutée.

Edit 3: Much edit please smile
Bon j'ai effectuer un chmod +x de /data/db/mongod.lock et je n'ai plus le problème ci dessus, mais comme j'ai pas de chance il y a encore quelque chose. Toujours mongod qui fait des siennes, cette fois ci avec :

Thu Apr 23 10:08:01.916 [initandlisten] waiting for connections on port 27017
Thu Apr 23 10:08:11.814 [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
Thu Apr 23 10:08:11.814 [signalProcessingThread] now exiting

Un signal qui terminerait mongod, mais la je vois pas du tout, je continue mon debug, si vous avez des idées, je suis preneur.

Dernière modification par ezekiel22 (Le 23/04/2015, à 10:15)

Hors ligne

#9 Le 23/04/2015, à 10:30

Sciensous

Re : Script services au démarrage

bien ça avance smile

tu peux voir que dans le fichier il y a un case qui quitte le script à chaque cas (exit 3)
(rappel: exit=> sort du script)

mais tu peux voir aussi qu'il teste la présence de /etc/rc.local

donc je te propose de faire propre:
tu supprimes ton fichier dans /etc/init.d mais tu le laisses dans /usr/bin
tu enlèves les 2 lignes rajoutées (le exit 0 pose-til problème ?)
et tu crées le fichier /etc/rc.local en y mettant tes 2 lignes de codes avec le chemin complet du script:

/usr/bin/GenieACS restart  #(ou start ???)
exit 0

rend le executable (chmod +x /etc/rc.local)

verifie le mode executable avec

ls -alh /usr/bin/GenieACS

pour info le /etc/rc.local par defaut :

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#10 Le 23/04/2015, à 10:43

ezekiel22

Re : Script services au démarrage

Ok Sciensous je vais faire ce que tu me dis, ce sera tout de même plus propre. Je test et je te redis, même si maintenant il me semble que ça fonctionne, mondodb qui pose des problèmes.

Edit: je ne pense plus que ce soit le script qui pose problème car au redémarrage de la machine, en faisant un ps -ef, je vois bien /usr/bin/GenieACS restart et juste en dessous mongod, donc c'est que le script fonctionne (plus ou moins) mais mongodb qui n'en fait qu'a ça tête.
Donc j'ai retirer les deux dernières lignes de rc.local et comme je suis curieux ben j'ai voulu reboot pour voir, ben j'ai bien fait car j'ai un mongodb qui start tout seul, mais ma commande /usr/bin/GenieACS restart devrait couper ce process. Je ne comprends plus rien ^^.

Dernière modification par ezekiel22 (Le 23/04/2015, à 10:51)

Hors ligne

#11 Le 23/04/2015, à 13:15

Sciensous

Re : Script services au démarrage

mongodb est lancé via un nohup; ça je ne maitrise pas du tout mais peut etre que c'est pour cette raison que le process est toujours lancé ?
de plus pour arreter le process c'est le parametre stop et non restart.

pour etre sur de tout arreter: killall -9 mogodb ou pkill ou autre... non ?


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#12 Le 23/04/2015, à 14:28

ezekiel22

Re : Script services au démarrage

Bon j'ai décidé de réinstaller mongodb car je pense que c’était devenu une usine à gaz, je viens de réinstaller et tester mon script, ca fonctionne, reste plus qu'a voir si au démarrage ça veut bien ou toujours pas.
Sinon pour ce que tu dis le nohup permet de faire passer la tache en thread qui ne sera plus lier à la console. Et le restart permet l'arret puis le redémarrage, donc logiquement ça fait un stop puis un start.
Sinon lors de l’exécution sur une console de monscript ça fonctionne sans problème, le stop, start et restart.
Je pense à un problème de de droits lors de l’exécution du script au démarrage.

Hors ligne

#13 Le 23/04/2015, à 15:45

ezekiel22

Re : Script services au démarrage

Bon ben c'est toujours pas ça mais il y a du mieux désormais le restart ne bug plus, il fallait ajouter un sleep.
Je vois mon script au démarrage en faisant un ps -ef mais que pendant un très court instant, après il disparait et ne lance rien.
Voila une partie du contenu de mon ps au démarrage:

root      2730  2595  0 16:04 ?        00:00:00 /bin/sh /etc/rc2.d/S99rc.local s
root      2736  2729  0 16:04 ?        00:00:00 sleep 60
root      2738  2730  0 16:04 ?        00:00:00 /bin/sh -e /etc/rc.local
root      2742  2738  0 16:04 ?        00:00:00 /bin/sh /usr/bin/GenieACS start
root      2751  2742 88 16:04 ?        00:00:07 mongod --dbpath /var/lib/mongodb
root      2763  2742  0 16:04 ?        00:00:00 sleep 2

et après plus rien disparition. Je me demande si il n'y a pas une limite d'attente aux processus car j'ai quelques sleep dans le programme.

Dernière modification par ezekiel22 (Le 23/04/2015, à 16:10)

Hors ligne

#14 Le 23/04/2015, à 16:57

Sciensous

Re : Script services au démarrage

là ce doit être ton script qui bloque quelquepart; je ne peux pas trop t'aider mais essayer l'ecriture dans fichier log pour debugguer


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#15 Le 23/04/2015, à 17:27

ezekiel22

Re : Script services au démarrage

Je suis d'accord avec toi mais ça me semble vachement bizarre que dans une console mon programme fonctionne, et au démarrage bah ça fonctionne pas/ c'est bizarre.
J'ai un peu modifier mon programme si tu veux voir:

#!/bin/sh 
### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

#Le script suivant va permettre de lancer GenieACS et de l'arreter

start()
{
	echo "start"
	#L'ordre de lancement des services est :
	sleep 2
	# -Redis-Server (un système de gestion de base de données)
	cd /opt/ &
	nohup redis-server &
	sleep 2
	# -Démarrage de GenieACS-CWMP (démarre le service d'échange)
	nohup genieacs-cwmp &
	sleep 2
	# -Démarrage de GenieACS-NBI (donne accès à l'API)
	nohup genieacs-nbi &
	sleep 2
	# -Démarrage de GenieACS-FS (permet d'enregistrer les fichiers)
	nohup genieacs-fs &
	# -Démarrage de Rails server (donne accès à l'interface web)
	#On se déplace dans le dossier contenant le service
	cd /opt/genieacs-gui/ 
	sleep 2
	nohup rails s &
	# -MongoDB (une base de données)
	#ps -ef | grep mongod | grep -v grep | awk '{print $2}' |sudo xargs kill -9
	sleep 3
	nohup mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log &
}

stop()
{
	echo "stop"
	#Eteint mongodb
	ps -ef | grep mongod | grep -v grep | awk '{print $2}' |sudo xargs kill -9
	sleep 3
	#Kill le processus redis-server
	killall redis-server
	#xargs permet de passer en argument/paramètre d'une commande l'entrée standard
	#Kill les processus genieacs
	ps -ef | grep genieacs | grep -v grep | awk '{print $2}' |sudo xargs kill -9
	#Kill le processus rails s
	ps -ef | grep rails\ s | grep -v grep | awk '{print $2}' |sudo xargs kill -9
	
}

restart()
{
    stop;
    sleep 2;
    start;
}
case $1 in
start) 
      start;;
stop)
      stop;;
restart)
      restart;;
*)
      start;;
      
esac
exit 0

Tu pourrais me conseiller pour débuguer s'il te plait, je ne m'y connait pas trop hmm
Merci en tout cas pour ton aide ^^

Hors ligne