Script qui se lance au démarrage

Bonjour,

Quand j’allume mon serveur après qu’il se soit éteint pour l’une ou l’autre raison, j’ai souvent pluseirus services qui rechignent à démarrer, m’obligeant à les lancer à la main. Est-il possible de créer un script qui détecte puis relance les services qui ont échoué à leur démarrage de manière automatisée ?

Bonjour,

C’est quand même étonnant ce comportement et il vaudrait mieux savoir pourquoi ils ne redémarrent pas correctement plutôt que d’essayer d’y apporter une rustine.
Les services sont bien censé être lancés au démarrage? Tu peux le vérifier en consultant la valeur de start_on_boot pour chaque service avec la commande:

yunohost service status

Autrement oui c’est sans doute faisable en consultant le status des services avec par exemple pour dovecot:

grep Active <(systemctl status dovecot)

Et si le retour n’est pas Active, alors le lancer. Mais franchement, je pense qu’il faut voir d’où vient ton problème d’origine.

C’est hyper variable, ce ne sont pas toujours les mêmes services qui n’arrivent pas à se lancer.

Il y a certainement plus simple mais sur l’idée que j’ai mentionné, tu peux t’inspirer de ceci:

service=$(grep -v ' ' /etc/yunohost/services.yml | cut -d':' -f1)
for alive in $service;do if grep -q Active <(systemctl status $alive);then echo "$alive is not dead";fi;done

A adapter en fonction du retour du service qui ne démarre pas en remplaçant Active (failed? Inactive? je te laisse vérifier ce qu’il y a en retour pour un service qui ne démarre pas, attention à la casse minuscule ou majuscule), là c’est un exemple sur les services qui tournent correctement. il faudra remplacer la commande echo par

yunohost service start $alive

Mais sais-tu pourquoi les services échouent leur démarrage? Le problème est là.

Pas la moindre idée.

Ou alors ils se lancent tous en même temps, et ta machine n’a pas assez de ram au lancement et du coup certains se font tué dans la foulée.

Pourtant, elle a 7Go de RAM, et à aucun moment je ne l’ai vue saturer.

C’est une hypothèse uniquement.
Faut regarder les logs de chaque service juste après un redémarrage, tu y verra peut être quelques chose.