Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Script init.d et update-rc.d au comportement inattendu

7 réponses
Avatar
Eddy F.
Bonjour,

Comme je suis nouveau sur cette liste, je me présente brièvement.
J'ai commencé à utiliser Debian en 2004 avec Sarge (en testing puis en
stable) puis je l'ai un peu quitté pour d'autres distributions.
Je viens d'installer squeeze et je poste ce message car je ne parviens pas à
comprendre le comportement inattendu (du moins par moi) de update-rc.d.

Bon, l'idée est de lancer deux scripts perso : un au démarrage qui envoie
des mails dans certains cas, l'autre au shutdown qui crée une archive
tar.bz2 de certains fichiers.

J'ai créé un script /etc/init.d/perso (voir ci-dessous) et utilisé
update-rc.d perso start 99 2 . stop 10 0 .

Les liens sont bien créés dans rc0.d et dans rc2.d mais au lieu d'être
préfixés par S99 et K10, j'ai obtenu S01 et K01. Pourquoi ? Bon, cela semble
fonctionner quand même mais j'aimerais pouvoir mieux contrôler l'ordre des
scripts.

Voici le script /etc/init.d/perso :
===========
#! /bin/bash
### BEGIN INIT INFO
# Default-Start: 2
# Default-Stop: 0
# Short-Description: Scripts personnels
# Description: Ce script permet de lancer des scripts personnels au
# démarrage ou à l'arrêt de la machine.
### END INIT INFO

case "$1" in
start)
/home/eddy/documents/programmes/moncron/avert_mail
;;
stop)
/home/eddy/bin/mini_sauvegarde
;;
esac

exit 0
=========

Bon, je me doute que mon script n'est peut-être pas très canonique ; peut-
être est-ce en partie la cause du problème ?

Pour la petite histoire, lors d'un essai précédent, je n'avais pas mis de
Default-Start et Default-Stop dans le script et update-rc.d créait les liens
ailleurs que dans rc0.d et rc2.d. On dirait que les paramètres passés à
update-rc.d sont ignorés.

Faut-il ajouter quelque chose à mon script ? J'aimerais néanmoins ne pas le
compliquer trop. Il n'a que des prétentions locales après tout.

Merci pour tout conseil.

PS
Je suis quand même étonné du nombre de scripts qui commencent par S01 et
K01. N'y aurait-il pas un bug quelque part ?

--
Eddy F.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/201009271926.40466.edfnet-deb@yahoo.fr

7 réponses

Avatar
Gilles Mocellin
--nextPart4784423.hYDLEPXz3a
Content-Type: Text/Plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Le Monday 27 September 2010 19:26:40 Eddy F., vous avez écrit :
Bonjour,

Comme je suis nouveau sur cette liste, je me présente brièvement.
J'ai commencé à utiliser Debian en 2004 avec Sarge (en testing puis en
stable) puis je l'ai un peu quitté pour d'autres distributions.
Je viens d'installer squeeze et je poste ce message car je ne parviens pas
à comprendre le comportement inattendu (du moins par moi) de update-rc. d.

Bon, l'idée est de lancer deux scripts perso : un au démarrage qui en voie
des mails dans certains cas, l'autre au shutdown qui crée une archive
tar.bz2 de certains fichiers.

J'ai créé un script /etc/init.d/perso (voir ci-dessous) et utilisé
update-rc.d perso start 99 2 . stop 10 0 .

Les liens sont bien créés dans rc0.d et dans rc2.d mais au lieu d'ê tre
préfixés par S99 et K10, j'ai obtenu S01 et K01. Pourquoi ? Bon, cela
semble fonctionner quand même mais j'aimerais pouvoir mieux contrôler
l'ordre des scripts.

Voici le script /etc/init.d/perso :
===========
#! /bin/bash
### BEGIN INIT INFO
# Default-Start: 2
# Default-Stop: 0
# Short-Description: Scripts personnels
# Description: Ce script permet de lancer des scripts personnels au
# démarrage ou à l'arrêt de la machine.
### END INIT INFO

case "$1" in
start)
/home/eddy/documents/programmes/moncron/avert_mail
;;
stop)
/home/eddy/bin/mini_sauvegarde
;;
esac

exit 0
=========

Bon, je me doute que mon script n'est peut-être pas très canonique ; peut-
être est-ce en partie la cause du problème ?

Pour la petite histoire, lors d'un essai précédent, je n'avais pas mi s de
Default-Start et Default-Stop dans le script et update-rc.d créait les
liens ailleurs que dans rc0.d et rc2.d. On dirait que les paramètres
passés à update-rc.d sont ignorés.

Faut-il ajouter quelque chose à mon script ? J'aimerais néanmoins ne pas le
compliquer trop. Il n'a que des prétentions locales après tout.

Merci pour tout conseil.

PS
Je suis quand même étonné du nombre de scripts qui commencent par S 01 et
K01. N'y aurait-il pas un bug quelque part ?



Le système de démarrage de squeeze n'est plus du bon vieux sysv... C'es t un
système de dépendances avec insserv.
L'ordre de démarrage est déterminer en fonction des Headers LSB en tê te de
script d'init qui détermine des dépendances.

http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot


--nextPart4784423.hYDLEPXz3a
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEABECAAYFAkyg9zIACgkQDltnDmLJYdCUoQCeOd1+sUeKMc1TYUN+dWrtBM/u
bXEAoKujQnP8BfaJm90ChJQrF3QN99GQ
=xrcn
-----END PGP SIGNATURE-----

--nextPart4784423.hYDLEPXz3a--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Eddy F.
Le lundi 27 septembre 2010 à 21:57:38, Gilles Mocellin a écrit :
Le Monday 27 September 2010 19:26:40 Eddy F., vous avez écrit :
> [...]
> J'ai créé un script /etc/init.d/perso (voir ci-dessous) et utilisé
>
> update-rc.d perso start 99 2 . stop 10 0 .
>
> Les liens sont bien créés dans rc0.d et dans rc2.d mais au lieu d'être
> préfixés par S99 et K10, j'ai obtenu S01 et K01. Pourquoi ? Bon, cela
> semble fonctionner quand même mais j'aimerais pouvoir mieux contrôler
> l'ordre des scripts.
> [...]

Le système de démarrage de squeeze n'est plus du bon vieux sysv... C'est
un système de dépendances avec insserv.
L'ordre de démarrage est déterminer en fonction des Headers LSB en tête
de script d'init qui détermine des dépendances.

http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot



Ah bon ! J'ai lu la doc ci-dessus ainsi que
http://wiki.debian.org/LSBInitScripts qui m'a été envoyé par mail.

Grâce à vos aides, j'ai adapté mon script mais il me reste quelques
questions. C'est surtout pour m'assurer que je n'ai pas compris de travers.

1/ Mon script peut raisonnablement attendre la fin de la séquence de
démarrage lorsqu'il est "started" au runlevel 2. J'ai donc utilisé
# Required-Start: $all
Est-ce correct ?

2/ Au shutdown de la machine, le script doit utiliser "find ... -mtime ..."
et passer le résultat à tar. Il utilise logger pour écrire dans
/var/log/messages. J'ai utilisé
# Required-Stop: $local_fs $syslog $time
Cela est-il suffisant ou y a-t-il un service que j'aurais oublié ?

3/ man update-rc.d signale toujours le format du style
update-rc.d perso start 99 2 . stop 10 0 .
qui, si j'ai bien compris, ne sert plus à rien.
Correct ?

4/ J'ai utilisé à la place
update-rc.d perso defaults
et il m'a été répondu
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: perso start runlevel arguments (2 3 4 5) do not
match LSB Default-Start values (2)
update-rc.d: warning: perso stop runlevel arguments (0 1 6) do not match
LSB Default-Stop values (0)
Puis-je ignorer ces warnings ?
À vrai dire, je ne comprends pas bien pourquoi on peut (doit ?) préciser
Default-Start et Default-Stop si dès qu'on y met autre chose que les "LSB
Default-Start/Stop values" ça se plaint. Je loupe quelque chose ?

Merci en tout cas. J'ai déjà bien avancé grâce à vos aides.

--
Eddy

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Gilles Mocellin
--FL5UXtIhxfXey3p5
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le lundi 27 septembre, Eddy F. écrivit :

Je ne suis pas un pro de insserv, mais je vais essayer de dire ce que je
crois...
[...]
1/ Mon script peut raisonnablement attendre la fin de la séquence de
démarrage lorsqu'il est "started" au runlevel 2. J'ai donc utilisé
# Required-Start: $all
Est-ce correct ?



Je dirais que oui.

2/ Au shutdown de la machine, le script doit utiliser "find ... -mtime .. ."
et passer le résultat à tar. Il utilise logger pour écrire dans
/var/log/messages. J'ai utilisé
# Required-Stop: $local_fs $syslog $time
Cela est-il suffisant ou y a-t-il un service que j'aurais oublié ?



Là, je pense que ce n'est pas bon.
J'interprete ce que tu a mis comme :
Lancer mon script quand les systèmes de fichiers locaux sont démontés,
syslog arreté et time arreté.
Impossible de logguer dans syslog si ton script requère l'arrêt de
celui-ci.

3/ man update-rc.d signale toujours le format du style
update-rc.d perso start 99 2 . stop 10 0 .
qui, si j'ai bien compris, ne sert plus à rien.
Correct ?



Oui. Enfin, en mode compatible, si.
Deux façon de repasser en mode compatible sysv :
- une erreur lors de la génération des dépendances
- la désactivation du mode dépendance (réinstaller sysvinit à la pl ace
de insserv)

4/ J'ai utilisé à la place
update-rc.d perso defaults
et il m'a été répondu
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: perso start runlevel arguments (2 3 4 5) do not
match LSB Default-Start values (2)
update-rc.d: warning: perso stop runlevel arguments (0 1 6) do not ma tch
LSB Default-Stop values (0)
Puis-je ignorer ces warnings ?
À vrai dire, je ne comprends pas bien pourquoi on peut (doit ?) préci ser
Default-Start et Default-Stop si dès qu'on y met autre chose que les "L SB
Default-Start/Stop values" ça se plaint. Je loupe quelque chose ?



Non, il faut que ça corresponde. Si dans ton package, tu a préciser que
ton script démarre aux niveaux 2, 3, 4 et 5, alors met la même chose
dans le script d'init au niveau "Default-Start".

Merci en tout cas. J'ai déjà bien avancé grâce à vos aides.



De rien...

--FL5UXtIhxfXey3p5
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkyhGugACgkQDltnDmLJYdBfagCfZRtknkfCPxIBS+FH+eDgQDFZ
U3MAnAt7djvAJCs1e+sRSnmZhdm+JyFu
=p0ia
-----END PGP SIGNATURE-----

--FL5UXtIhxfXey3p5--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Eddy F.
Le mardi 28 septembre 2010 à 00:30:00, Gilles Mocellin a écrit :
Le lundi 27 septembre, Eddy F. écrivit :


[...]
> 2/ Au shutdown de la machine, le script doit utiliser "find ... -mtime
> ..." et passer le résultat à tar. Il utilise logger pour écrire dans
> /var/log/messages. J'ai utilisé
>
> # Required-Stop: $local_fs $syslog $time
>
> Cela est-il suffisant ou y a-t-il un service que j'aurais oublié ?

Là, je pense que ce n'est pas bon.
J'interprete ce que tu a mis comme :
Lancer mon script quand les systèmes de fichiers locaux sont démontés,
syslog arreté et time arreté.
Impossible de logguer dans syslog si ton script requère l'arrêt de
celui-ci.



Je croyais comme toi aussi mais
http://wiki.debian.org/LSBInitScripts
semble indiquer que l'on liste ici les services qui sont nécessaires pour
la partie "Stop" du script et qui ne seront donc arrêtés qu'après
l'exécution du script.

Je pense que je ne me trompe pas car effectivement mon lien perso à l'arrêt
est devenu K01perso dans rc0.d et est bien placé avant K04rsyslog et
K09umountfs (par exemple).

Non, ma question portait plutôt sur le fait de n'avoir rien oublié dans
cette liste de services. Mais il semble que non. Depuis, j'ai vu les entrées
dans /var/log/messages et l'archive tar est bien créée.


Problème résolu. Une dernière fois : merci.


--
Eddy

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Gilles Mocellin
--yrj/dFKFPuw6o+aM
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le mardi 28 septembre, Eddy F. écrivit :
[...]
> > # Required-Stop: $local_fs $syslog $time
> >
> > Cela est-il suffisant ou y a-t-il un service que j'aurais oublié ?
>
> Là, je pense que ce n'est pas bon.
> J'interprete ce que tu a mis comme :
> Lancer mon script quand les systèmes de fichiers locaux sont démont és,
> syslog arreté et time arreté.
> Impossible de logguer dans syslog si ton script requère l'arrêt de
> celui-ci.

Je croyais comme toi aussi mais
http://wiki.debian.org/LSBInitScripts
semble indiquer que l'on liste ici les services qui sont nécessaires p our
la partie "Stop" du script et qui ne seront donc arrêtés qu'après
l'exécution du script.

Je pense que je ne me trompe pas car effectivement mon lien perso à l'a rrêt
est devenu K01perso dans rc0.d et est bien placé avant K04rsyslog et
K09umountfs (par exemple).



C'est bon à savoir, c'est quand même pas très intuitif.

[...]

--yrj/dFKFPuw6o+aM
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAkyiV+IACgkQDltnDmLJYdAOAQCeLMA/CegPilpDzYR3YLg5h6Gy
HZgAnRdek10ku0geEwWSZgpXgBXPZIjM
=mD3d
-----END PGP SIGNATURE-----

--yrj/dFKFPuw6o+aM--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le mardi 28 septembre 2010 à 23:02:26, Gilles Mocellin a écrit :
Le mardi 28 septembre, Eddy F. écrivit :
[…]
> Je pense que je ne me trompe pas car effectivement mon lien
> perso à l'arrêt est devenu K01perso dans rc0.d et est bien
> placé avant K04rsyslog et K09umountfs (par exemple).

C'est bon à savoir, c'est quand même pas très intuitif.



Euh, ben si, justement : on indique à chaque fois de quoi on
a besoin. Ce dont on a _déjà_ besoin au démarrage, et _encor e_
besoin à l’arrêt. L’ordre de nécessité est utilisé tel quel au
démarrage et en inversé à l’arrêt, comme des pa renthèses.

Je ne vois pas trop l’intérêt (ou la facilité) de li ster ce qui
peut ne plus servir. À la rigueur, ce qui doit absolument être
arrêté avant nous mais je ne vois pas de cas d’usage rà ©el, là…

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Pascal Hambourg
Salut,

Sylvain L. Sauvage a écrit :

Je ne vois pas trop l'intérêt (ou la facilité) de lister ce qui
peut ne plus servir. À la rigueur, ce qui doit absolument être
arrêté avant nous mais je ne vois pas de cas d'usage réel, là...



Cela peut être utile pour des services optionnels, par exemple un
pare-feu : le pare-feu doit être démarré avant le réseau et arrêté
après. Comme le pare-feu est optionnel, on ne peut pas mettre ces
dépendances dans l'en-tête du script de démarrage du réseau.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/