Lancement d'un service au démarrage [Réglé]
Cela marchait avant
Système et matériels / Installation et configuration

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
J'ai migré mon PC sur mga7 sans problème, en réinstallant le système seulement (en écrasant la partition racine), je n'ai pas touché à /home ni aux autres partitions.
J'ai un petit soucis avec des services qui se lancent au démarrage et qui maintenant ne se lancent pas correctement.
D'une part j'ai un service "squeezeboxserver". C'est juste un script qui se lance au démarrage et qui démarre un serveur local de musique sur le port 9000. Le rpm d'installation me créé les fichiers suivants pour le démarrage :
Code BASH :
$ find /etc/ -name "*boxserver*" 2>/dev/null /etc/sysconfig/squeezeboxserver /etc/logrotate.d/squeezeboxserver /etc/squeezeboxserver /etc/rc.d/rc3.d/S80squeezeboxserver /etc/rc.d/init.d/squeezeboxserver /etc/rc.d/rc4.d/S80squeezeboxserver /etc/rc.d/rc5.d/S80squeezeboxserver /etc/rc.d/rc2.d/K30squeezeboxserver /etc/rc.d/rc1.d/K30squeezeboxserver /etc/rc.d/rc0.d/K30squeezeboxserver /etc/rc.d/rc6.d/K30squeezeboxserver
Celui-ci démarre correctement.
J'ai ensuite un deuxième petit serveur "mmserver" qui doit démarrer avant "squeezeboxserver". Il n'y a pas de rpm, c'est un petit éxécutable, lancé par le script suivant :
Code BASH :
#! /bin/sh # NON-PRIVIELEGED USER TO RUN MUSICMAGICSERVER. USER=antonio # PATH TO THE MUSICMAGICMIXERSERVER export MUSICHOME=/home/$USER/progs/MusicIP/ case $1 in start) su - $USER -c $MUSICHOME"MusicMagicServer start & > /dev/null" echo "Running MusicMagicServer" exit ;; stop) su - $USER -c $MUSICHOME"MusicMagicServer stop & > /dev/null" echo "Stopped MusicMagicServer" exit ;; *) echo "Usage: /etc/rc.d/init.d/mmserver { start | stop }" exit ;; esac
Sous mageia 6, j'avais créé un service comme ceci :
/etc/systemd/system/mmserver.service
Code BASH :
[Unit] Description=MusicMagicServer After=squeezeboxserver.service Requires=squeezeboxserver.service [Service] Type=oneshot RemainAfterExit=no ExecStart=/etc/init.d/mmserver start ExecStop=/etc/init.d/mmserver stop [Install] WantedBy=multi-user.target
Ce fichier figurait dans /etc/systemd/system/ et /etc/systemd/system/multi-user.target.wants/
Pour activer le service au démarrage, j'avais utilisé la commande enable.
Malheureusement, ça ne marche plus, si je tape la même commande, j'ai une erreur :
Code BASH :
$ sudo systemctl enable mmserver.service Synchronizing state of mmserver.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install enable mmserver le service mmserver ne prend pas en charge chkconfig
j'ai essayé la solution donnée ici : http://linuxine.net/wiki/tiki-index.php?page=Ajouter+un+service+à+chkconfig
sans succés.
c'est à dire que mmserver n'est pas démarré du tout au démarrage.
Je dois donc stopper "squeezeboxserver", lancer le script "mmserver" à la main, puis redémarrer squeezeboxserver, qui met bizarrement beaucoup plus de temps à démarrer, alors que normalement c'est immédiat.
Je ne connais pas bien le fonctionnement des services.
J'aimerai bien retrouver le même fonctionnement que sous mga6, que je trouvais assez élégant, plutôt que de bidouiller des nouveaux scripts à mettre dans les répertoires de rc.d
Meci pour l'aide !

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
A mon avis, il faudrait faire avec squeezeboxserver le port vers systemd. Je comprend qu'il est géré par l'ancien système de démarrage sysV. Ensuite tu dois pouvoir mettre une relation entre lui et l'autre service que tu as déjà migré pour que l'un démarre après l'autre.
Ou alors tu les fusionnes dans le même service.
Concrètement, je ne sais pas faire.
Yves

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Code BASH :
#!/bin/sh # NON-PRIVIELEGED USER TO RUN MUSICMAGICSERVER. USER="antonio" # PATH TO THE MUSICMAGICMIXERSERVER export MUSICHOME="/home/${USER}/progs/MusicIP" case ${1} in start) su - ${USER} -c "${MUSICHOME}/MusicMagicServer start 1>/dev/null &" echo "Running MusicMagicServer" exit 0 ;; stop) su - ${USER} -c "${MUSICHOME}/MusicMagicServer stop 1>/dev/null &" echo "Stopped MusicMagicServer" exit 0 ;; *) echo 'Usage: /etc/rc.d/init.d/mmserver { start | stop }' exit 1 ;; esac
Changements :
Suppression de l'espace après le shebang, suppression des doubles-espaces,
changement du PATH de l'exécutable pour avoir "${PATH}/exécutable ..." au lieu de $PATH"exécutable ..." (ce mélange chemin"fichier avec la double quote au milieu me... me... Je ne trouve pas les mots.

Suppression des espaces entre > et /dev/null et précision que c'est la sortie standard qui est jeté au vide. Permutation de & >... par 1>... & car sinon je ne comprends pas.
Ajout des codes de sorties 0 (tout va bien) et 1 (différent de 0, soit "il y a un truc qui ne va pas").
Changement de echo "usage" par echo 'usage' car ce qu'il y a entre simple quote n'est pas interprété par les shells.
Remplacement du style $VARIABLE par le mieux défini ${VARIABLE} .
Remarque : Est-ce que ton script MusicMagicServer utilise la variable ${MUSICHOME} ? Si oui, rien à dire. Sinon, l'export de la variable ne sert à rien.
Tu demandes à ce que la sortie standard du script soit "jeté" dans le vide /dev/null. Quel intérêt ? Si le script est lancé comme un service avant même que l'utilisateur est lancé, il n'en verra jamais une ligne. Donc inutile de réorienter... Je supprimerai 1>/dev/null mais aussi.
Édité par Jybz Le 31/12/2019 à 15h31
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Je lis dans le fichier pour lancer le service mmserver :
Code BASH :
[Unit] Description=MusicMagicServer After=squeezeboxserver.service
Ok, mmserver doit démarrer AFTER sqeezeboxserver.
Cependant, ici :
Antoniop :
J'ai ensuite un deuxième petit serveur "mmserver" qui doit démarrer avant "squeezeboxserver".
Tu dis que mmserver doit démarrer AVANT sqeezeboxserver.
Soit je ne comprends pas le fichier du service. Soit ... Il y aurait une erreur...
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Il faut comparer le code que j'ai posté avec le code du premier poste.
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Code BASH :
su - $USER -c $MUSICHOME"MusicMagicServer start & > /dev/null"
avec :
Code BASH :
su - ${USER} -c "${MUSICHOME}/MusicMagicServer start 1>/dev/null &"
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
C'est du fait que la variable $MUSICHOME est mal délimité (du manque de { }) ainsi, le shell recherche la variable $MUSICHOMEMusicMagicServer qui elle n'existe pas !
Donc je me permets de refaire ce conseil :
avoir des ${VARIABLE} bien défini
préciser les /dossier sans la barre à la fin
Ainsi, on peut faire ${VARIABLE_DOSSIER}/fichier

Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
Oui, le script parait assez mal écrit, ce n'est pas moi qui l'ait écrit et je l'ai laissé tel que réalisé par l'auteur. Bah, il marche, et quand je vais sur l'autre forum dédié au squeezeboxserver, cela permet de ne pas s'embrouiller avec les différences de script.
Pour le fichier service, je l'ai fait un peu "à tâtons" vu que je n'y connais pas grand chose, c'est mon premier fichier service.
Le "after" signifie qu'après le service mmserver, il y a le lancement de squeezeboxserver. C'est un peu bizarre mais cela veut dire que squeezeboxserver attend le démarrage de mmserver, ce qui est nécessaire pour le bon fonctionnement.
Sur mga6, c'est toujours comme ça que ça fonctionne (j'ai encore un PC sous mga6).
Merci pour les remarques


nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
@Jybz: un man systemd.unit dit:
Citation :
Before=, After= These two settings expect a space-separated list of unit names. They configure ordering dependencies between units. If a unit foo.service contains a setting Before=bar.service and both units are being started, bar.service's start-up is delayed until foo.service has finished starting up. Note that this setting is independent of and orthogonal to the requirement dependencies as configured by Requires=, Wants= or BindsTo=. It is a common pattern to include a unit name in both the After= and Requires= options, in which case the unit listed will be started before the unit that is configured with these options. This option may be specified more than once, in which case ordering dependencies for all listed names are created. After= is the inverse of Before=, i.e. while After= ensures that the configured unit is started after the listed unit finished starting up, Before= ensures the opposite, that the configured unit is fully started up before the listed unit is started. Note that when two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied. i.e. if a unit is configured with After= on another unit, the former is stopped before the latter if both are shut down. Given two units with any ordering dependency between them, if one unit is shut down and the other is started up, the shutdown is ordered before the start-up. It doesn't matter if the ordering dependency is After= or Before=, in this case. It also doesn't matter which of the two is shut down, as long as one is shut down and the other is started up. The shutdown is ordered before the start-up in all cases. If two units have no ordering dependencies between them, they are shut down or started up simultaneously, and no ordering takes place. It depends on the unit type when precisely a unit has finished starting up. Most importantly, for service units start-up is considered completed for the purpose of Before=/After= when all its configured start-up commands have been invoked and they either failed or reported start-up success.
J' aurais également pensé le contraire...
Édité par nic80 Le 31/12/2019 à 18h43

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Code BASH :
echo "Usage: /etc/rc.d/init.d/mmserver { start | stop }"
Le .service :
Code BASH :
ExecStart=/etc/init.d/mmserver start
Il est passé ou /rc.d/ ?
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Jybz Membre non connecté
-
- Voir le profil du membre Jybz
- Inscrit le : 10/10/2018
- Groupes :
-
Administrateur
-
Forgeron
Tu pourrais, si j'ai bien compris les outils et leur mise en place, remplacer after= par before=.
Téléverser une image : /wiki/hebergement-de-fichiers-sur-mlo
Arch | Machine | OS |
x86_64 | lenovo x250 | mga9 |
armv7hl | bananapro | mga9 |
aarch64 | Raspberry Pi 4B | mga9 |

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
Jybz :
Je suis d'accord avec nic80 qui l'a prouvé avec la documentation.
Tu pourrais, si j'ai bien compris les outils et leur mise en place, remplacer after= par before=.
Tu pourrais, si j'ai bien compris les outils et leur mise en place, remplacer after= par before=.
Ben non, parce que squeezeboxserver n'est pas un service comme mmserver, en tout cas dans cette configuration. J'avoue, c'est assez tordu et je m'y suis laissé prendre au début.
Jybz :
Il est passé ou /rc.d/ ?
hé hé, il n'y en a pas !
les rc.d ne sont que des liens sur les scripts figurant dans /etc/init.d/, mais ici du fait du service j'en ai pas besoin. Enfin, quand j'aurai réussi à le faire fonctioner.
Je précise que j'ai aussi un RPI sur lequel tournent ces 2 serveurs, mais le script mmserver il est dans l'arborescence rcx.d :
$ find /etc -name "*mmserver*" 2>/dev/null
/etc/rc2.d/S02mmserver
/etc/rc0.d/K02mmserver
/etc/init.d/mmserver
/etc/rc1.d/K02mmserver
/etc/rc4.d/S02mmserver
/etc/rc3.d/S02mmserver
/etc/rc5.d/S02mmserver
/etc/rc6.d/K02mmserver
et il ressemble à ça (je sais, il est moche aussi) :
Code BASH :
$ cat /etc/rc2.d/S02mmserver #! /bin/sh ### BEGIN INIT INFO # Provides: mmserver # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start MusicIP daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO # NON-PRIVIELEGED USER TO RUN MUSICMAGICSERVER. USER=lapin # PATH TO THE MUSICMAGICMIXERSERVER export MUSICHOME=/home/$USER/progs/MusicIP/ case $1 in start) su - $USER -c $MUSICHOME"MusicMagicServer start & > /dev/null" echo "Running MusicMagicServer" exit ;; stop) su - $USER -c $MUSICHOME"MusicMagicServer stop & > /dev/null" echo "Stopped MusicMagicServer" exit ;; status) if pgrep -f MusicMagicServer > /dev/null then echo "MusicIP Server is running" else echo "MusicIP Server is stopped" fi ;; *) echo "Usage: /etc/rc.d/init.d/mmserver { start | stop }" exit ;; esac
Par contre, je n'ai pas de fichier service.
Édité par Antoniop Le 31/12/2019 à 19h52

nic80 Membre non connecté
-
- Voir le profil du membre nic80
- Inscrit le : 06/08/2018
- Groupes :
-
Modérateur
Dans le script du premier post, il n' y a pas ceci:
Citation :
# Default-Start: 2 3 4 5 # Default-Stop: 0 1 6
Je ne sais pas s' il ne faudrait pas le rajouter au script (même si cela a probablement déjà été testé par rapport au wiki indiqué).
Sur la Mageia 6, il y a quelque chose dans les répertoires /etc/rcx.d ?
Édité par nic80 Le 31/12/2019 à 20h40

Antoniop Membre non connecté
-
- Voir le profil du membre Antoniop
- Inscrit le : 21/12/2011
- Groupes :
nic80 :
Bonjour,
Dans le script du premier post, il n' y a pas ceci:
Dans le script du premier post, il n' y a pas ceci:
Citation :
# Default-Start: 2 3 4 5 # Default-Stop: 0 1 6
Non, en fait ces lignes avait été rajoutées spécifiquement pour RPI par quelqu'un d'autre (que moi) qui avait adapté les scripts pour RPI.
Au départ, j'utilisais mmserver sous mga5, je n'avais pas eu à créer de fichier service, j'avais juste créé des liens Sxxmmserver et Kxxmmserver sur le fichier mmserver à la mano, dans le bon ordre (croissant).
Sous MGA6, j'ai créé le service comme indiqué au-dessus car j'avais des problèmes pour m'assurer que l'ordre de démarrage était bon.
Cela étant, en y regardant à nouveau, Jybz a raison, dans le fichier service cela devrait être Before squeezeboxserver et pas After, sauf que je suis à peu près sûr que Before ne marchait pas.
nic80 :
Je ne sais pas s' il ne faudrait pas le rajouter au script (même si cela a probablement déjà été testé par rapport au wiki indiqué).
Je n'ai pas testé, oui il faudrait que j'essaie.
nic80 :
Sur la Mageia 6, il y a quelque chose dans les répertoires /etc/rcx.d ?
non, et ça démarre bien !
Édité par Antoniop Le 01/01/2020 à 01h12
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie