Aide pour redemarrage automatique d'un service

Tags: #<Tag:0x00007f509be72528>

Bonjour a tous !
Après une recherche sur votre forum, je n’ai point trouvé ce que je cherchais.

Tout est dans le titre, j’aimerais que mon service redémarre automatiquement.
Quelles lignes ajouter au .service pour que cela arrive ?

Actuellement, le service démarre manuellement, fonctionne et s’arrête manuellement, RAS.
J’aimerais a présent qu’il s’arrête automatiquement (après 11h30 de fonctionnement) et redémarre automatiquement dans la foulée (pause de 25secondes).
Pour arriver a ce résultat j’ai donc ajouté les lignes suivante a mon service :

Restart=always
RestartSec=25
RuntimeMaxSec=41400

Résultat : Le service s’arrête avec le code « timeout » due la ligne « RuntimeMaxSec=41400 » mais ne redémarre pas par la suite. Service reste a l’arrêt.
Je suis complétement perdue dans le man de systemd.service. Il doit me manquer une ligne évidente mais il en a tellement d’option et c’est la première fois que je bricole un service, j’aimerais vos conseils de pro pour faire redémarrer mon service automatiquement après un timeout s’il vous plait

En espérant être dans la bonne catégorie, désolée si ce n’est pas le cas.
C’est le premier forum dédié a debian auquel je m’inscris, je suis navrée de ne venir que pour demander une assistance.

Merci a ceux qui prendront le temps de lire.
Cordialement.

Avec systemd il faudrait que tu regarde du côté des timers, il y a de quoi lire pour t’en inspirer sur le wiki de Archlinux et de Debian.

et la doc de FreeDesktop.org :

https://www.freedesktop.org/software/systemd/man/systemd.timer.html

Bonjour,
de quel service s’agit-il?
Pourquoi as-tu besoin de l’arrêter au bout de 11h30 de fonctionnement?
j’imagine que la pause de 25 secondes c’est pour le temps qu’il s’arrête?

Bonjour !

Il s’agit d’un serveur pour le jeu « Project Zomboid ».
Besoin de l’arrêter pour les mises a jour.
La pause de 25 secondes est pour le temps qu’il s’arrête, tout fait. Pour pas qu’il ne redémarre tout de suite. Normalement le service s’arrête après la sauvegarde.
J’ai également un script qui éteint le service si une mise a jour pour les mods du jeu est trouvée.
J’aimerais donc qu’il redémarre automatiquement s’il est éteint.
Trop d’option, je ne sais pas lesquelles me seront utiles.

Merci de ton attention :slight_smile:

l’idée c’est d’abord d’avoir un service systemd standard.
Que tu peux utiliser comme cela:

systemctl start|stop|status|enable|disable zomboid

si c’est le cas, alors il te suffit d’un script du genre:

script_ou_fonction_pour_savoir_si_y_a_des_mises_jour
if [ scrip]; then
systemctl stop zomboid
sleep 25 # tu peux faire mieux en utilisant le process ID de zomboid (/run/...) et la commande wait <id> qui va attendre que ton process ai fini
script-de-je-fais-ma-mise-a-jour && systemctl start zomboid

et ensuite tu met le script complet dans crontab pour le lancer tous les jour à une heure donnée et c’est fait.

C’est une mauvaise idée d’inclure dans la gestion d’un service autre chose que le mode de marche et d’arrêt standard.

1 J'aime

Merci de ta réponse.
Oui il s’agit d’un service systemd standard que j’utilise comme cela :

systemctl start|stop|status|enable|disable zomboid

J’ai suivis ce tuto : « https://pzwiki.net/wiki/Dedicated_Server » pour son fonctionnement.

Tu as raison, il me faut un script. J’aimerais redémarrer automatiquement ce service.

En revanche j’ai mal expliqué le fonctionnement du service, veuillez m’excuser.

Je démarre le service manuellement (très bien).
Les mises a jour se font automatiquement au démarrage de zomboid.service (Serveur Zomboid et mods du jeu, c’est réglé).
Le service s’arrête tout seul, que ce soit un « timeout » ou alors un « systemctl stop zomboid.service » saisie manuellement ou/et surtout automatiquement via un mod (Steam Workshop::Udderly Up To Date).
Le mod s’occupe d’eteindre le zomboid.service (C’est parfait.)

J’ai contacté la personne qui publie la mod via Discord qui m’a répondue pour les 3 lignes dans zomboid.service :
« UdderlyEvelyn — Hier à 01:22
should be fine
[01:22]
i just use a script with a bash loop
[01:22]
but matter of personal preference »

Malheureusement cela ne suffit pas.
Je lui ai demandé son script mais il dépasse de loin de mes compétences… (je peux éventuellement vous le transférer)

Le truc : Mises a jour au démarrage du serveur zomboid (le zomboid.service), le serveur zomboid tourne. Si une mise a jour de mods devient disponible, les joueurs qui veulent se connecter bénéficient de la mise a jour mais pas le serveur. Ils ne peuvent pas le rejoindre. Besoin de redémarrer le serveur zomboid pour qu’il mette a jour les mods tout seul.
Je le faisais manuellement et j’ai trouvé ce mod qui s’en occupe.

J’aimerais, s’il vous plait, votre aide pour redémarrer automatiquement ce service.
L’eteindre manuellement, avec un timeout ou quand une mise a jour de mod est dispo, c’est OK.

Selon vous, quelle serait le moyen le plus simple de parvenir a ce résultat ?

Je n’ai pas essayé « restart=on-failure » mais je pense qu’un autre réglage est nécessaire. peut etre « type=onshoot ».

Trop d’options, je me suis perdue…

j’ai regardé le tutoriel, il indique explicitement:

System.d

[WARNING], The Zomboid Devs explicitly discourage this method, the safeties currently in place should insure a proper saving sequence on server shutdown, but there are no guarantees. An option is to configure the server to run under system.d.

Si le serveur se met à jour tout seul au démarrage, alors c’est plutôt assez simple:
Créer un script zomboid_cron

#!/bin/bash
systemctl stop zomboid.service || exit 1
systemctl start zomboid.service

et tu met dans le cron à un horaire qui te convient. Par exemple dans crontab à 12h avec crontab -e:
0 12 * * * sudo /path/to/zomboid_cron

Bonjour ! Merci de ta réponse.
Grace a toi je pourrais redémarrer mon service après x temps :wink: (dans l’exemple, toutes les 12h) Merci :slight_smile:
La première réponse de @Clochette me permettrait de faire la même chose également (avec plus de recherches et plus compliqué a mettre en place ?)

Cependant, Cela ne me convient qu’a moitié. :frowning: car :

  • Le service s’arrête aléatoirement a cause du script qui cherche les mises a jours du mods.
    Je ne suis pas prévenue lorsque cela arrive. C’est arrivé 2 fois entre mon message d’hier et aujourd’hui. Il y a très régulièrement des mise a jour de mod. ( ce qui est arrivé 15 minutes a peine après le redémarrage du service cette nuit a 1h. Le service était inactif depuis plus de 10h en me reveillant :frowning: )

Certes ta méthode avec le script_cron fonctionnerait. (Magnifique) Mais le service pourrait être stoppé pendant un moment.

J’aimerais avoir un script qui redémarre automatiquement mon service si celui ci est éteint.

Périodiquement avec vos solutions ça m’aide pour la moitié et je vous en remercie grandement ! J’utiliserais la méthode de Zargos et travaillerais sur celle de Clochette.

Merci de me rappeler le message des devs. Leur message concerne la sauvegarde du monde il me semble. Passer par systemd ou un script, peu m’importe. Seul le résultat compte. Mais je suis trop bête pour y arriver seule.

Je suis également désolée d’expliquer si mal la difficulté que je rencontre.
Veuillez m’excuser (les débutants…)

pour ce qui est de lancer les miss à our, étant donné que lancement du service déclenche les mises à jour, alors tu n’as pas besoin d’un autre script qui fait le job. Avec le cron, tu relance ton service tous les jours, donc tu auras une mise à jour chaque jour.

Tu peux utiliser le cron.hourly pour vérifier le statut de ton service.
Tu fait un script qui a les permissions execute pour le root et qui verifie si le service est démarré, s’il est démarré tu ne fait rien sinon tu le relance.

#!bin/bash
status_service=`systemctl is-active zomboid.service`
if [ "${status_service}" = "inactive" ]; then
   systemctl restart zomboid.service
fi

si tu veux plus de frequence alors utilise crontab -e pour lui dire toutes les 30 mn:
30 * * * * sudo /path/to/zomboid_restart

Merci beaucoup Zargos !

Ton petit script a l’air parfait :slight_smile:

Ne connaissant rien aux « cron » quelques recherches s’imposent avant la mise en place.

Au niveau de la fréquence, merci de ta remarque, je pense y régler a 15 minutes ( car c’est également la fréquence de recherche des mise a jours de mod)

Cependant, si je dois éteindre manuellement le service pendant plus de 15 - 30 minutes, (pour mises a jour du système ou travailler sur le serveur zomboid ou bien autre chose) le fichier_cron va quand même s’occuper de relancer le service, n’est ce pas ?
Ou bien une fois le système démarré, le fichier_cron va faire son travail et démarrer le service ?

Il faudrait que je puisses désactiver le fichier_cron selon mes besoins.
Merci beaucoup pour tes réponses, je vais travailler sur les « cron ».

Bonne journée !!

MAJ = Script identique au tien créer.
Crontab édité (15 au lieu de 30).
Zomboid.service a son état d’origine (j’'ai laissé « RuntimeMaxSec=41400 »)

Voila a voir si tout cela fonctionne comme espéré.
Il faudra donc simplement que j’édite crontab pour empêcher le redémarrage auto de mon service ?
Je vous remercie pour votre aide precieuse. Rapide, simple, efficace. Vous êtes des champions :wink:

C’est un service qui permet de faire des tâches programmées en fait.

Ce n’est ps une bonne idée de faire des mises à jour toutes les 15mn, ca va impacter les accès utilisateurs.
Faire un check toutes les 30sec c’est pour relancer le service si celui-ci est tombé, masi pas pour gérer les mises à jour.
En mode opérationnel normal tu ne fait qu’une mise à jour par jour (et crois moi c’est bien suffisant la plupart du temps).
Pour desactiver l’entrée cron que tu as créé, dans crontab il suffit de commenter la ligne avec un #.
Dans le cron.daily, cron.hourly, il sufit d’enlever le script du répertoire associé /etc/cron.daily/

Oui, c’est un planificateur de taches en effet. C’est parfait :slight_smile:

Je ne fais pas des mises a jours toutes les 15 minutes. Mauvaise compréhension.
Je vérifie le status du service toutes les 15 minutes. 23 minutes précisément si tu veux tout savoir ^^

Je suis obligée de relancer le service plusieurs fois par jour. C’est pour cela que j’ai demandé de l’aide pour un redémarrage automatique d’un service en particulier. Entre la mise a jour du serveur et des mods, ça devenait trop répétitif, il fallait automatiser la tache.

C’est chose faite je crois :slight_smile: a voir si cron fait son job ^^.
Je reviendrais vers vous pour vous faire un retour et peut être pour demander votre assistance mais dans un autre sujet ^^

1 J'aime

Désolée, petite erreur dans ton script :

 #!/bin/bash
status_service=$(systemctl is-active zomboid.service)

Ce n’était pas le bon format pour la variable. La commande ne passait pas. (donc aucun reboot)
et pour cron il semblerait que pour lui dire toutes les 30 min ce soit :

*/30 * * * * /path/to/zomboid

Cordialement.

si tu as utilisé des quote oui ça ne marche pas, c’était des contre-quote (alt-gr 7), que j’utilise tout le temps :slight_smile: mais ta forme marche aussi :slight_smile:

C’est bizarre, les partie avec des etoiles sont obligatoirement des nombre, il ne peut pas y avoir de barre de fraction dedans comme tu l’as mis.
Tu as bien édité le fichier crontab avec crontab -e ?

quote, contre quote, kikif, ca interpretera que le resultat de la commande. il faut une fonction.

pour les cron il est possible d’utiliser ces formats :

Pour chaque unité, on peut utiliser les notations suivantes :

  • 1-5 : les unités de temps de 1 à 5.
  • */6 : toutes les 6 unités de temps (toutes les 6 heures par exemple).
  • 2,7 : les unités de temps 2 et 7.

Non c’est faux. Ça n’est absolument pas la même chose.
Les simples quotes ne représentent qu’une chaine de caractères. Si dedans il y a de commandes elles ne sont pas interprétées.
les doubles quotes c’est pareil, mais les variables sont interprétées par le shell.
les contre-quotes ou anti-quotes représentent par contre du code à exécuter. Pour les utiliser massivement dans mes scripts, je sais de fait que ce n’est pas la même chose.

Pour les la syntaxe des nombres de crontab, au temps pour moi, faute d’utiliser cette forme d’ailleurs. mais j’utilise très peu crontab.

Bonjour

Concernant les contre quotes, voir : BashFAQ/082 - Greg's Wiki et : Shell Command Language


Voir :

man 5 crontab

(le 5 permet de faire afficher le manuel du format des fichiers et conventions)

Voici la ligne concernant l’utilisation de la barre oblique :

…
       Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
…

J’ai un peu survolé mais ça correspond un peu à ça : Running docker-compose as a systemd service · GitHub

Faut adapter pour ton serveur mais je n’ai pas rencontré de soucis en procédant comme ça.
En plus, on ne touche pas cron.