OVH Cloud OVH Cloud

lancement script a l'extinction

26 réponses
Avatar
Christophe PEREZ
Bonjour,

Sous mdk 9.1, j'ai fait un script qui me fait la synchronisation de
certains répertoires entre mon portable et mon serveur.
Je veux que ce script se lance au démarrage et à l'extinction du
portable.
Dans ce script (synchrod) placé dans /etc/init.d , j'ai donc :
# chkconfig: 2345 98 01

et :
========== 8< =========================
case "$1" in
'start')
echo "Fonction (start)"
fct_synchro &
;;
'stop')
echo "Fonction (stop)"
fct_synchro
echo "fin (stop)"
;;
esac
exit 0
========== 8< =========================

En effet, je veux que la synchro au démarrage tourne en tâche de fond
non bloquante (d'où le &), mais que l'extinction attente que la synchro
soit faite.

J'ai fait un chkconfig --add synchrod

Et j'ai bien :
$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@ /etc/rc6.d/K01synchrod@
/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@ /etc/rc7.d/S98synchrod@
/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@

Pourtant, le script n'est jamais lancé à l'extinction, bien qu'il le
soit parfaitement au démarrage (aucun doute sur la fonction
fct_synchro() ).
Les fonctions "echo" sont redigirées vers un log par un exec en début
de script et la "fonction (stop)" n'y est jamais inscrite.
L'extinction étant testée par un "reboot" ou "halt" en ligne de commande.

Je ne parviens pas à trouver ce qui cloche.

Merci d'avance.

--
Christophe PEREZ
Écrivez moi sans _faute !

10 réponses

1 2 3
Avatar
Tiscali
"Christophe PEREZ" a écrit dans le message de
news:
Bonjour,

Sous mdk 9.1, j'ai fait un script qui me fait la synchronisation de
certains répertoires entre mon portable et mon serveur.
Je veux que ce script se lance au démarrage et à l'extinction du
portable.
Dans ce script (synchrod) placé dans /etc/init.d , j'ai donc :
# chkconfig: 2345 98 01

et :
========== 8< ======================== > case "$1" in
'start')
echo "Fonction (start)"
fct_synchro &
;;
'stop')
echo "Fonction (stop)"
fct_synchro
echo "fin (stop)"
;;
esac
exit 0
========== 8< ======================== >
En effet, je veux que la synchro au démarrage tourne en tâche de fond
non bloquante (d'où le &), mais que l'extinction attente que la synchro
soit faite.

J'ai fait un chkconfig --add synchrod

Et j'ai bien :
$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@ /etc/rc6.d/K01synchrod@
/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@ /etc/rc7.d/S98synchrod@
/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@

Pourtant, le script n'est jamais lancé à l'extinction, bien qu'il le
soit parfaitement au démarrage (aucun doute sur la fonction
fct_synchro() ).
Les fonctions "echo" sont redigirées vers un log par un exec en début
de script et la "fonction (stop)" n'y est jamais inscrite.
L'extinction étant testée par un "reboot" ou "halt" en ligne de commande.

Je ne parviens pas à trouver ce qui cloche.

Bonjour,

Je n'utilise pas chkconfig personnellement, je fais mes symlinks moi-même.
Cependant, je vois que les symlinks ne sont pas installés pour tous les
niveaux de fonctionnement.
Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod

Tu peux connaitre le niveau de fonctionnement par défaut en tapant cette
commande:
grep initdefault /etc/inittab

++

Avatar
Philippe Delsol
"Christophe PEREZ" a écrit dans le message de
news:

Bonjour,

Sous mdk 9.1, j'ai fait un script qui me fait la synchronisation de
certains répertoires entre mon portable et mon serveur.
Je veux que ce script se lance au démarrage et à l'extinction du
portable.
Dans ce script (synchrod) placé dans /etc/init.d , j'ai donc :
# chkconfig: 2345 98 01

et :
========== 8< ======================== >>case "$1" in
'start')
echo "Fonction (start)"
fct_synchro &
;;
'stop')
echo "Fonction (stop)"
fct_synchro
echo "fin (stop)"
;;
esac
exit 0
========== 8< ======================== >>
En effet, je veux que la synchro au démarrage tourne en tâche de fond
non bloquante (d'où le &), mais que l'extinction attente que la synchro
soit faite.

J'ai fait un chkconfig --add synchrod

Et j'ai bien :
$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@ /etc/rc6.d/K01synchrod@
/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@ /etc/rc7.d/S98synchrod@
/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@

Pourtant, le script n'est jamais lancé à l'extinction, bien qu'il le
soit parfaitement au démarrage (aucun doute sur la fonction
fct_synchro() ).
Les fonctions "echo" sont redigirées vers un log par un exec en début
de script et la "fonction (stop)" n'y est jamais inscrite.
L'extinction étant testée par un "reboot" ou "halt" en ligne de commande.

Je ne parviens pas à trouver ce qui cloche.



Bonjour,
Je n'utilise pas chkconfig personnellement, je fais mes symlinks moi-même.
Cependant, je vois que les symlinks ne sont pas installés pour tous les
niveaux de fonctionnement.


En effet mais le K01synchro existe au niveau 1, ce qui devrait suffir.
Je ne vois pas d'où ça peut provenir ...

Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod

Tu peux connaitre le niveau de fonctionnement par défaut en tapant cette
commande:
grep initdefault /etc/inittab


ou "who -r" en utilisateur standard et "runlel" en utilisateur root.

Philippe


Avatar
Tiscali
"Philippe Delsol" a écrit dans le message de
news:407c2d5f$0$17494$
"Christophe PEREZ" a écrit dans le
message de


news:

Bonjour,

Sous mdk 9.1, j'ai fait un script qui me fait la synchronisation de
certains répertoires entre mon portable et mon serveur.
Je veux que ce script se lance au démarrage et à l'extinction du
portable.
Dans ce script (synchrod) placé dans /etc/init.d , j'ai donc :
# chkconfig: 2345 98 01

et :
========== 8< ======================== > >>case "$1" in
'start')
echo "Fonction (start)"
fct_synchro &
;;
'stop')
echo "Fonction (stop)"
fct_synchro
echo "fin (stop)"
;;
esac
exit 0
========== 8< ======================== > >>
En effet, je veux que la synchro au démarrage tourne en tâche de fond
non bloquante (d'où le &), mais que l'extinction attente que la synchro
soit faite.

J'ai fait un chkconfig --add synchrod

Et j'ai bien :
$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@
/etc/rc6.d/K01synchrod@



/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@
/etc/rc7.d/S98synchrod@



/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@

Pourtant, le script n'est jamais lancé à l'extinction, bien qu'il le
soit parfaitement au démarrage (aucun doute sur la fonction
fct_synchro() ).
Les fonctions "echo" sont redigirées vers un log par un exec en début
de script et la "fonction (stop)" n'y est jamais inscrite.
L'extinction étant testée par un "reboot" ou "halt" en ligne de
commande.




Je ne parviens pas à trouver ce qui cloche.



Bonjour,
Je n'utilise pas chkconfig personnellement, je fais mes symlinks
moi-même.


Cependant, je vois que les symlinks ne sont pas installés pour tous les
niveaux de fonctionnement.


En effet mais le K01synchro existe au niveau 1, ce qui devrait suffir.
Je ne vois pas d'où ça peut provenir ...


Je ne crois pas justement, le niveau 1 corespond au mode mono-utilisateur.

Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod

Tu peux connaitre le niveau de fonctionnement par défaut en tapant cette
commande:
grep initdefault /etc/inittab


ou "who -r" en utilisateur standard et "runlel" en utilisateur root.
Ces commandes donnent le niveau courant, pas forcément celui par défaut.

Mais je suppose que ça revient au même.

++



Avatar
Christophe PEREZ
Le Tue, 13 Apr 2004 19:36:24 +0200, Tiscali a écrit:

$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@ /etc/rc6.d/K01synchrod@
/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@ /etc/rc7.d/S98synchrod@
/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@


Je n'utilise pas chkconfig personnellement, je fais mes symlinks moi-même.


Ce qui revient au même...

Cependant, je vois que les symlinks ne sont pas installés pour tous les
niveaux de fonctionnement.


Moi je les vois pour tous.

Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod


Comprends pas là !??!!

C'est exactement pareil pour postfix (exemple), et il s'arrête bien lui !

$ ls /etc/rc?.d/*postfix
/etc/rc0.d/K30postfix@ /etc/rc3.d/S80postfix@ /etc/rc6.d/K30postfix@
/etc/rc1.d/K30postfix@ /etc/rc4.d/S80postfix@ /etc/rc7.d/S80postfix@
/etc/rc2.d/S80postfix@ /etc/rc5.d/S80postfix@
Il n'y a aucunement besoin d'avoir un K??postfix dans /etc/rcX.d/ pour
qu'il s'arrête !??!!

grep initdefault /etc/inittab


Merci, mais je le connais ;-)

--------------------

Le Tue, 13 Apr 2004 22:01:35 +0200, Tiscali a écrit:

Je ne crois pas justement, le niveau 1 corespond au mode mono-utilisateur.


Oui, mais les niveaux 0 et 6 sont bien pour l'arrêt et le reboot non ?
Je suis comme Philippe, je ne vois pas non plus du tout d'où vient mon
problème...

Merci pour ta réponse, mais j'attends d'autres avis sur la question ;-)

--
Christophe PEREZ
Écrivez moi sans _faute !


Avatar
g.patel
On Tue, 13 Apr 2004 16:46:50 -0400, Christophe PEREZ
wrote:

Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod


Comprends pas là !??!!

C'est exactement pareil pour postfix (exemple), et il s'arrête bien lui !

$ ls /etc/rc?.d/*postfix
/etc/rc0.d/K30postfix@ /etc/rc3.d/S80postfix@ /etc/rc6.d/K30postfix@
/etc/rc1.d/K30postfix@ /etc/rc4.d/S80postfix@ /etc/rc7.d/S80postfix@
/etc/rc2.d/S80postfix@ /etc/rc5.d/S80postfix@
Il n'y a aucunement besoin d'avoir un K??postfix dans /etc/rcX.d/ pour
qu'il s'arrête !??!!


euh...ne serait il pas utile de faire un essai avant de
'savoir' que ça ne sert à rien ?

Gérard Patel


Avatar
no_spam
On Tue, 13 Apr 2004 23:03:21 +0000, gerard patel wrote:

On Tue, 13 Apr 2004 16:46:50 -0400, Christophe PEREZ
wrote:

Si le niveau de fonctionnement normal est 5 (graphique) tu peux utiliser
cette commande pour résoudre ton problème:
ln -s /etc/init.d/synchrod /etc/rc5.d/K01synchrod


Comprends pas là !??!!

C'est exactement pareil pour postfix (exemple), et il s'arrête bien lui !

$ ls /etc/rc?.d/*postfix
/etc/rc0.d/K30postfix@ /etc/rc3.d/S80postfix@ /etc/rc6.d/K30postfix@
/etc/rc1.d/K30postfix@ /etc/rc4.d/S80postfix@ /etc/rc7.d/S80postfix@
/etc/rc2.d/S80postfix@ /etc/rc5.d/S80postfix@
Il n'y a aucunement besoin d'avoir un K??postfix dans /etc/rcX.d/ pour
qu'il s'arrête !??!!


euh...ne serait il pas utile de faire un essai avant de
'savoir' que ça ne sert à rien ?


Il a raison.
Halt et reboot sont juste des changement de runlevel vers les niveaux
0 et 6. Donc, si les scripts d'arrêt sont présent dans /etc/rc0.d/
et /etc/rc6.d/ et valides, il n'y a aucune utilité à les mettre
autre part.



Avatar
Christophe PEREZ
Le Tue, 13 Apr 2004 23:03:21 +0000, gerard patel a écrit:

euh...ne serait il pas utile de faire un essai avant de
'savoir' que ça ne sert à rien ?


Mais je ne comprends plus rien à rien moi alors.
Il faudrait, dans un même niveau, mettre un Sxxsynchrod et un Kyysynchrod ??
Mais K, c'est pour le stop non ?
Si je fais ça, logiquement, il va me le stopper, puis me le lancer quand
je vais démarrer en init 5 (par exemple) non (yy étant inférieur à xx) ?
J'ai déjà fait des 10aines de scripts à lancer au démarrage et à
stopper à la fermeture, sans jamais avoir eu à faire ça.


--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Wed, 14 Apr 2004 09:26:26 +0200, no_spam a écrit:

Il a raison.


Ouf ! Merci ;-)

Halt et reboot sont juste des changement de runlevel vers les niveaux
0 et 6. Donc, si les scripts d'arrêt sont présent dans /etc/rc0.d/
et /etc/rc6.d/ et valides, il n'y a aucune utilité à les mettre
autre part.


Et une idée alors du pourquoi il ne se lance pas ?

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
TiChou
Dans le message <news:,
*Christophe PEREZ* tapota sur f.c.o.l.configuration :

Bonjour,


Bonjour,

Sous mdk 9.1, j'ai fait un script qui me fait la synchronisation de
certains répertoires entre mon portable et mon serveur.
Je veux que ce script se lance au démarrage et à l'extinction du
portable.
Dans ce script (synchrod) placé dans /etc/init.d , j'ai donc :
# chkconfig: 2345 98 01

et :
========== 8< ======================== > case "$1" in
'start')
echo "Fonction (start)"
fct_synchro &
;;
'stop')
echo "Fonction (stop)"
fct_synchro
echo "fin (stop)"
;;
esac
exit 0
========== 8< ========================
En effet, je veux que la synchro au démarrage tourne en tâche de fond
non bloquante (d'où le &), mais que l'extinction attente que la synchro
soit faite.

J'ai fait un chkconfig --add synchrod

Et j'ai bien :
$ ls /etc/rc?.d/*synchrod
/etc/rc0.d/K01synchrod@ /etc/rc3.d/S98synchrod@ /etc/rc6.d/K01synchrod@
/etc/rc1.d/K01synchrod@ /etc/rc4.d/S98synchrod@ /etc/rc7.d/S98synchrod@
/etc/rc2.d/S98synchrod@ /etc/rc5.d/S98synchrod@

Pourtant, le script n'est jamais lancé à l'extinction, bien qu'il le
soit parfaitement au démarrage (aucun doute sur la fonction
fct_synchro() ).


Un service est stoppé par le système à l'arrêt ou au reboot de la machine si
ce service tourne ou est actif, sinon le système ne fera rien. C'est
pourquoi le système vérifie la présence du verrou dans le répertoire
/var/lock/subsys pour savoir si le service est actif ou non.
De plus, dans votre cas, il ne s'agit pas réellement d'un service que l'on
doit stopper, mais plutôt d'un service que l'on doit lancer à l'arrêt.

Donc pour résoudre votre problème, je vois deux manières de faire.

La première, on contourne le fait qu'à l'arrêt il ne s'agit pas réellement
d'un service qui tourne toujours et qu'on doit stopper, en créant le fameux
verrou :

# chkconfig: 2345 98 01

service=${0##*/}

[...]

case "$1" in
start)
gprintf "Starting %s service: " "$service"
fct_synchro &
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$service
;;
stop)
gprintf "Stopping %s service: " "$service"
fct_synchro
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$service
;;
esac

exit $RETVAL

La deuxième, on considère qu'il s'agit d'une application à lancer à tous les
runlevels :


# chkconfig: 0123456 XX YY

service=${0##*/}

[...]

case "$1" in
start)
gprintf "Starting %s service: " "$service"
if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]
then
fct_synchro
else
fct_synchro &
fi
RETVAL=$?
echo
;;
esac

exit $RETVAL

Mais ici se pose le problème des niveaux de priorité qui vu le type
d'applicatif, doivent effectivement être différents selon le runlevel. Il
faudra alors éventuellement créer manuellement les liens symboliques vers
/etc/rc?.d.

Il ne vous reste plus qu'à tester une des deux solutions à partir du
squelette de mes deux exemples de script.

Merci d'avance.


De rien.

--
TiChou

Avatar
Christophe PEREZ
Le Wed, 14 Apr 2004 18:00:16 +0200, TiChou a écrit:

Un service est stoppé par le système à l'arrêt ou au reboot de la
machine si ce service tourne ou est actif, sinon le système ne fera rien.


Ah !!! Voilà l'explication.

C'est pourquoi le système vérifie la présence du verrou dans le
répertoire /var/lock/subsys pour savoir si le service est actif ou non.


Ok, ça c'est une chose que je ne savais pas, même si j'avais une
intuition dans le genre ;-)

De plus, dans votre cas, il ne s'agit pas réellement d'un service que
l'on doit stopper, mais plutôt d'un service que l'on doit lancer à
l'arrêt.


Tout à fait.

[snip scripts à étudier et tester]

Mais ici se pose le problème des niveaux de priorité qui vu le type
d'applicatif, doivent effectivement être différents selon le runlevel.
Il faudra alors éventuellement créer manuellement les liens symboliques
vers /etc/rc?.d.


Pas encore bien compris ça...

Merci d'avance.


De rien.


Oh si ! ;-)

--
Christophe PEREZ
Écrivez moi sans _faute !


1 2 3