====== 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