F5UII – Station radioamateur française

Démarrage automatique de MMDVMHost

Dans cet article, vous découvrez comment faire en sorte que MMDVMHost démarre automatiquement à la mise sous tension de votre Raspberry Pi.

Le démarrage automatique de MMDVMHost

Sur le Raspberry Pi, il existe deux solutions (celles que je connais) pour lancer automatiquement un logiciel à la mise sous tension (ou reboot) du Raspberry Pi, tournant sous Raspbian.

Démarrage simple

Pour démarrer automatiquement MMDVMHost, la solution la plus simple est d’éditer ce fichier de démarrage et d’y ajouter la ligne de commande pour lancer MMDVMHost avant l’instruction exit 0

sudo nano /etc/rc.local
#!/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.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo  /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini

exit 0

Démarrage avec déclaration d’un service MMDVMHost

Une autre solution, un peu plus élégante est de créer un service.

Prérequis

Installation de screen

sudo apt-get install screen

Création du fichier service

sudo nano /lib/systemd/system/mmdvmhost.service
[Unit]
Description=MMDVM Host Service
After=syslog.target network.target

[Service]
User=root
WorkingDirectory=/opt/MMDVMHost
ExecStart=/usr/bin/screen -S MMDVMHost -D -m /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
ExecStop=/usr/bin/screen -S MMDVMHost -X quit
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Dans la section [Service], les deux dernières lignes permettent d’assurer le rédémarrage de MMDVMHost en cas de plantage. Il faut noter qu’il est très rare d’être confronté à des arrêts inopinés de MMDVMHost. Nous allons tester le bon fonctionnement du redémarrage plus bas dans l’article.

Les répertoires de lancement de MMDVMHost indiqués ici correspondent à ceux utilisés lors du déroulement du tutorial d’installation de MMDVMHost.

Création du fichier de temporisation du lancement

Le lancement du service est temporisé après 60 secondes après le démarrage

sudo nano /lib/systemd/system/mmdvmhost.timer
[Timer]
OnStartupSec=60

[Install]
WantedBy=multi-user.target


Application des droits et prise en compte du service

sudo chmod 755 /lib/systemd/system/mmdvmhost.service
sudo chmod 755 /lib/systemd/system/mmdvmhost.timer
sudo ln -s /lib/systemd/system/mmdvmhost.service /etc/systemd/system/mmdvmhost.service
sudo ln -s /lib/systemd/system/mmdvmhost.timer /etc/systemd/system/mmdvmhost.timer

Nous pouvons redémarrer le gestionnaire de services

sudo systemctl daemon-reload

A présent le service MMDVMHost est prêt à être démarré. A ce stade, nous pouvons lancer le service sans redémarrer.

sudo systemctl start mmdvmhost.service

Vérification du fonctionnement du service

Vous pouvez vérifier que le service lancement bien MMDVMHost qui doit apparaitre dans les processus (ps) avec l’instruction suivante, et qui doit retourner 3 lignes.

sudo ps aux | grep MMDVMHost
root      9657  1.0  0.6   5192  2684 ?        Ss   16:19   0:00 /usr/bin/SCREEN -S MMDVMHost -D -m /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
root      9662 18.2  1.2  15140  5436 pts/0    Ssl+ 16:19   0:00 /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
pi        9777  0.0  0.4   4268  1956 pts/1    S+   16:19   0:00 grep --color=auto MMDVMHost

Pour vérifier le fonctionnement du service, vous aurez accès au log de MMDVMHost avec la commande suivante

sudo screen -r MMDVMHost

Le statut de fonctionnement du service est retourné avec cette commande

sudo systemctl status mmdvmhost.service
● mmdvmhost.timer
   Loaded: loaded (/lib/systemd/system/mmdvmhost.timer; enabled)
   Active: active (elapsed) since Sat 2017-05-20 16:33:10 CEST; 13min ago

May 20 16:33:10 raspberrypi systemd[1]: Starting mmdvmhost.timer.
May 20 16:33:10 raspberrypi systemd[1]: Started mmdvmhost.timer.

Testons à présent le redémarrage automatique.

Etape 1: Le service est en marche, MMDVMHost est présent dans la liste des processus :

sudo ps aux | grep MMDVMHost
root      9657  1.0  0.6   5192  2684 ?        Ss   16:19   0:00 /usr/bin/SCREEN -S MMDVMHost -D -m /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
root      9662 18.2  1.2  15140  5436 pts/0    Ssl+ 16:19   0:00 /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
pi        9777  0.0  0.4   4268  1956 pts/1    S+   16:19   0:00 grep --color=auto MMDVMHost

Etape 2: Nous allons tuer (“killer”) le processus MMDVMhost avec

sudo killall MMDVMHost

Etape 3: Vérifions immédiatement la liste des processus.

sudo ps aux | grep MMDVMHost
pi 6360 0.0 0.4 4268 1828 pts/0 S+ 16:37 0:00 grep --color=auto MMDVMHost

Il n’y a plus qu’une seule ligne… Mais 10 secondes plus tard, la même commande affiche à nouveau les 3 lignes. MMDVMHost a bien été redémarré !

root      6609  0.0  0.6   5192  2812 ?        Ss   16:37   0:00 /usr/bin/SCREEN -S MMDVMHost -D -m /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
root      6613  6.4  1.3  16712  5920 pts/2    Ssl+ 16:37   0:03 /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini
pi        7852  0.0  0.4   4268  1856 pts/0    S+   16:38   0:00 grep --color=auto MMDVMHost

Autre commande

Pour stopper le service

sudo systemctl stop mmdvmhost.service

Conclusion

You will understand that the second solution presented and which consists of starting MMDVMHost as a service is more robust thanks to the function offered by the service to automatically restart MMDVMHost on untimely shutdown.

If necessary the comments are opened below for your remarks, or questions.