====== Services Linux ====== * [[https://doc.ubuntu-fr.org/creer_un_service_avec_systemd]] * [[https://www.it-connect.fr/optimiser-et-securiser-le-processus-systemd-de-demarrage-des-machines-linux/]] * https://systemd-by-example.com/ ==== Interagir avec les services ==== ''systemctl'' affiche réellement tous les services, à la différence de ''service''. sudo systemctl list-units sudo systemctl status service_name.service sudo systemctl restart service_name.service ==== Créer un service ==== [Unit] Description=Launch gunicorn to run web plateform [Service] Type=simple User=root ExecStart=/home/user/start_gunicorn.sh Restart=on-failure [Install] WantedBy=multi-user.target L'exécutable de ''ExecStart'' doit être un chemin absolu (''python3'' ne suffit pas !). Enregistrer le service: sudo systemctl enable gunicorn.service Voir le statut du service: sudo service gunicorn status Redémarrer le service: sudo service gunicorn restart Ce genre de service n'apparaît pas dans le résultat de la commande ''service --status-all'', car cette commande ne renvoie que les services qui ont un script ''init.d''. Après modification d'un service, exécuter la commande: sudo systemctl daemon-reload Et redémarrer le service. ==== Logs des services ==== * [[https://www.tecmint.com/manage-systemd-logs-using-journalctl/|Manage Log Messages Under Systemd Using Journalctl]] [[https://unix.stackexchange.com/questions/225401/how-to-see-full-log-from-systemctl-status-service|Source]] journalctl -u service-name.service ==== Dépendances ==== Le service B a besoin du service A. Le démarrage du service B provoque donc le démarrage du service A. Dans le fichier du service B: [Unit] Description=... Wants=service-a.service ==== Timers ==== Système équivalents aux crons. * [[https://ungeek.fr/systemd-timer/]] Tout se trouve dans ''/etc/systemd/system/''. Lister tous les timers: systemctl list-timers Arrêter un timer: systemctl stop certbot.timer Désactiver un timer (ne se relancera pas aux prochains redémarrages): systemctl disable certbot.timer ==== Surcharger un service ==== sudo systemctl edit Là, réécrire le fichier de service, en ne laissant que les valeurs modifiées (il faut qu'il y ait les ''[Service]''). ==== Modifier le timeout de démarrage d'un service ==== * [[https://sleeplessbeastie.eu/2020/02/29/how-to-prevent-systemd-service-start-operation-from-timing-out/|Source]] Par défaut, un service doit démarrer en moins de 90 secondes. Il est possible de changer cette valeur : [Service] TimeoutStartSec=180 sudo systemctl show elasticsearch | grep ^Timeout