Astuces système d’exploitation
Démarrer une application au démarrage
Présentation de systemd
Pour démarrer automatiquement une application au démarrage de Linux, plusieurs solutions existent mais il y en a une qui est devenue répandue et qui est basée sur l’utilisation de la suite logicielle appelée systemd
.
Cette solution constitue une alternative moderne aux scripts d’initialisation “système V” (→ |
L’exécution d’une application ou service au démarrage de Linux via systemd
repose sur le contenu d’un fichier de configuration — avec l’extension .service
— résidant dans le répertoire /etc/systemd/system
. Ce fichier renseigne, entre autres choses :
-
sur les commandes à exécuter pour lancer/arrêter l’application/service
-
sur les autres applications/services sur lesquels reposent l’application/service que l’on désire gérer via
systemd
. Ceci permettra notamment de lancer notre application/service uniquement si les applications/services dont il dépend sont déjà en cours d’exécution -
sur l’environnement d’exécution de l’application/service (répertoire de travail, identité sour laquelle l’application/service doit être exécuté, variables d’environnement…)
Il est également possible de lancer une application automatiquement lorsqu’un utilisateur se connecte. Le fichier de configuration sera alors placé dans |
Cas d’utilisation : Lancer une application Qt/QML
Le fichier ci-dessous illustre comment lancer une application Qt/QML nommée GuiApp
développée dans le cadre d’un projet de 2ème année :
[Unit]
Description=MyIAQ GuiApp - Application locale de visualisation des mesures de qualité d'air intérieur (1)
Requires=mosquitto.service (2)
After=mosquitto.service (3)
[Service]
Type=simple (4)
Environment="DISPLAY=:0.0" (5)
Environment="XDG_RUNTIME_DIR=/run/user/1000" (5)
Environment="QT_QPA_PLATFORM=eglfs" (5)
Environment="QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/qt5pi/plugins/platforms" (5)
Environment="LD_LIBRARY_PATH=/opt/vc/lib" (5)
Environment="QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu/" (5)
#Environment="QT_QPA_EGLFS_PHYSICAL_WIDTH=154" (5)
#Environment="QT_QPA_EGLFS_PHYSICAL_HEIGHT=86" (5)
WorkingDirectory=/home/pi/MyIAQ/GuiApp (6)
User=pi (7)
Group=pi (7)
Restart=on-failure (8)
RestartSec=10 (8)
ExecStart=/home/pi/MyIAQ/GuiApp/GuiApp (9)
[Install]
WantedBy=multi-user.target (10)
1 | Description de l’application/service |
2 | Dépendance de l’application/service |
3 | application/service devant être exécuté avant d’exécuter notre application/service |
4 | Type du service à lancer. standard correspond à un processus standard à exécuter en tâche de fond |
5 | variables d’environnement requises pour notre application/service (chemin librairies, dimensions physiques de l’écran, …) |
6 | Répertoire depuis lequel notre application/service sera exécuté |
7 | utilisateur/groupe sous lesquels l’application/service sera exécuté |
8 | spécifie de redémarrer l’application/service en cas d’erreur après 10s |
9 | chemin absolu de l’application/service à exécuter |
10 | Niveau d’exécution (→ Run level de SysV) dans lequel sera exécuté l’application/service |
Dès que ce fichier est sauvegardé, on peut :
-
lancer manuellement l’application/service avec
> sudo systemctl start myiaq-guiapp.service
-
stopper manuellement l’application/service avec
> sudo systemctl stop myiaq-guiapp.service
-
lire le status d’exécution de l’application/service avec
> sudo systemctl status myiaq-guiapp.service
-
lancer automatiquement l’application/service lors des prochains démarrages avec
> sudo systemctl enable myiaq-guiapp.service
-
désactiver l’exécution automatique de l’application/service au démarrage avec
> sudo systemctl disable myiaq-guiapp.service
Lorsqu’on modifie le fichier |
Références
-
Understanding Systemd Units and Unit Files
→ Vue d’ensemble de
systemd
-
Créer un nouveau service avec systemd
→ tutoriel qui décrit la démarche à suivre pour transformer un programme en un service
systemd
pouvant être lancé automatiquement au démarrage du système.
🞄 🞄 🞄