Hello,
Laurent COOPER <laurent.cooper@ac-grenoble.fr> (2016-04-22):
Je cherche à faire un package qui lance un daemon et je me suis servi de
la structure du fichier init construite par défaut par les paquets debian. >>
Dans mon postinst, je lance une
invoke-rc.d mondaemon start
et là ... ça plante
Je lance à la main avec start-stop-daemon et les arguments du script ...
ça marche.
j'ai fini par trouver l'erreur
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
en fait, si VERBOSE vaut no (c'est la cas par défaut), le
[ "$VERBOSE" != no ] retourne 1.
Le && n'est donc pas évalué (normal, on veut pas afficher le log) mais
du coup, le dernier truc évalué du script est 1, et c'est ce qui est
retourné
Après apt-get source dh-make dans stable, je vois un script qui contient :
# Do NOT "set -e"
Le invoke-rc.d mondaemon start dit que ça n'a pas marché alors que tout
avait bien marché
Du coup, est ce le .init construit par dh_make est judicieux ? D'autant
que la fin utilise log_end_msg sans le [ "$VERBOSE" != no ] génant pour
la partie force-reload|restart)
Est ce qu'il faudrait ouvrir un bug la dessus à votre avis, ou est ce
que j'ai mal compris ?
Je serais à ta place, j'écrirais un fichier service au lieu d'essayer de maintenir un script shell de 160+ lignes.
KiBi.
C'est un script d'init écrit en shell. On peut désormais décrire de manière plus *fiable* un service en quelques lignes, c'est ce qu'on
appelle une unité systemd ; pour te faire une idée, tu peux jeter un œil à :
/lib/systemd/system/*.service
La documentation :
systemd.unit(5)
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
(Je n'ai pas vu de doc spécifique sur wiki.debian.org mais je n'ai pas cherché longuement.)
KiBi.
Laurent COOPER <laurent.cooper@ac-grenoble.fr> (2016-04-22):
Avant toute chose, merci d'avoir pris le temps de me lire et de me répondre
No worries.
Après apt-get source dh-make dans stable, je vois un script qui contient : >>>Oui, c'est bien de ce script que je parle, qui sert de base pour la
# Do NOT "set -e"
fourniture du service en théorie.
Justement, en suivant cette (forte) recommandation, avoir une commande qui retourne non-zéro ne met pas fin au script.
Plus de détails sur set * :
http://pubs.opengroup.org/onlinepubs/000095399/utilities/set.html
Si tu n'as pas positionné cette option, il est possible que ton analyse initiale ne soit pas la bonne.
Je ne comprends pas très bien. Je croyais que le script <paquet>.init
était justement un squelette pour gérer un service. J'ai lu la
documentation du mainteneur, le man de start-stop-daemon, et ça me
semblait un bon point de départ.
C'est un script d'init écrit en shell. On peut désormais décrire de manière plus fiable un service en quelques lignes, c'est ce qu'on
appelle une unité systemd ; pour te faire une idée, tu peux jeter un œil à :
/lib/systemd/system/*.service
La documentation :
systemd.unit(5)
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
(Je n'ai pas vu de doc spécifique sur wiki.debian.org mais je n'ai pas cherché longuement.)
KiBi.
⦠22 avril 2016 18:10 +0200, Laurent COOPER <laurent.cooper@ac-grenoble.fr> :
[ "$VERBOSE" != no ] && log_end_msg 0
Y'a un 'exit 0' en fin de script normalement.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 296 |
Nodes: | 16 (2 / 14) |
Uptime: | 50:50:50 |
Calls: | 6,649 |
Calls today: | 1 |
Files: | 12,200 |
Messages: | 5,330,301 |