Oui, c'est dans le 1er message.
systemd est à la fois complexe (parce qu'il sait tout faire... sauf le café) et simple
Dans votre cas (lancement d'un programme simple sous la forme d'un service), c'est assez simple :
Il faut un fichier dans /lib/systemd/system/ qui décrit toutes les informations nécessaires.
En général, on le nomme monprogramme.service (ex : gps.service) ou je ne sais quoi, ce que vous voulez.
Une fois que ce fichier y est, il faut activer le service par systemctl enable monprogramme.service et le démarrer une 1ère fois par systemctl start monprogramme.service pour vérifier que ça démarreg bien.
Voici un exemple tout bête dont vous pouvez vous inspirer, il devrai suffit dans votre cas :
Code : Tout sélectionner
[Unit]
Description=monservice
After=rc-local.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3 /home/pi/monservice.py
ExecStop=/bin/bash /home/pi/horam/stopmonservice.sh
PIDFile=/home/pi/monservice.pid
[Install]
WantedBy=multi-user.target
Description : le nom de votre service (texte simple)
After : votre service peut démarrer après que ...... tel autre service soit démarré (ici rc-local.service correspondrait à l'ajout d'une ligne de lancement à la fin de /etc/rc.local)
Type= il existe différent types de services (simple, fork, etc..), on ne va pas faire un cours magistrale, donc type=simple c'est parfait pour vous
User=root : quel utilisateur lance le programme ? (ce peut-être pi ou root ou un user système selon votre cas de figure). Le user en question doit avoir les droits nécessaires pour faire ce que le programme a à faire.
ExecStart= le script ou programme à lancer (dans mon cas : un script python)
ExecStop= pas obligatoire, mais dans certains cas, vous pourriez vouloir qu'un autre programme fasse quelques tâches à l'arrêt de votre service
PIDFile= : le nom du fichier qui contiendra le PID (process identifier) de votre service (numéro identifiant le processus)
WantedBy=pour equivalence au Run Level et multi-user.target veut dire quand le système est près à recevoir une demande de logging peu importe que l'interface graphique soit déjà disponible ou pas, sinon, c'est graphical-target
Donc un fichier comme ça, puis systemctl enable monservice.service et au prochain reboot, ça démarre tout seul !
C'est pas dur
Après il y a des dizaines d'options possibles :
- des dépendances (dans les 2 sens)
- lancement avant/après tel ou tel service
- ce qui se passe en cas de plantage du service (redémarrage automatique ? attention, danger ! au bout de combien de temps ? combien d'essais ?)