J'ai essayé de limiter le nombre de redémarrages d'un service (dans un conteneur). La version du système d'exploitation est centos-release-7-5, le fichier de service est à peu près comme ci-dessous (supprimé certains paramètres pour faciliter la lecture). Cela devrait être assez simple, comme l'ont souligné certains autres messages (limite de redémarrage 1 après défaillance du serveur, limite de redémarrage 2 après dépassement de la pile). Pourtant, StartLimitBurst et StartLimitIntervalSec ne fonctionnent jamais pour moi.
J'ai testé de plusieurs façons: (1) Je vérifie le PID du service, tue le service avec "kill -9 ****" plusieurs fois. Le service est toujours redémarré après 20s! (2) J'ai également essayé de gâcher le fichier de service, de ne jamais exécuter le conteneur. Pourtant, cela ne fonctionne pas, le fichier de service continue de redémarrer.
Une idée?
[Unit]
Description=Hello Fluentd
After=docker.service
Requires=docker.service
StartLimitBurst=2
StartLimitIntervalSec=150s
[Service]
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker stop "fluentd"
ExecStartPre=-/usr/bin/docker rm -f "fluentd"
ExecStart=/usr/bin/docker run fluentd
ExecStop=/usr/bin/docker stop "fluentd"
Restart=always
RestartSec=20s
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Réponses:
StartLimitIntervalSec=
a été ajouté dans le cadre de systemd v230. Dans systemd v229 et inférieur, vous ne pouvez utiliser queStartLimitInterval=
. Vous devrez également mettreStartLimitInterval=
etStartLimitBurst=
dans la[Service]
section - pas la[Unit]
section.Pour vérifier votre version systemd sur CentOS, exécutez
rpm -q systemd
.Si jamais vous passez à systemd v230 ou supérieur, les anciens noms de la
[Service]
section continueront de fonctionner.Source: https://lists.freedesktop.org/archives/systemd-devel/2017-July/039255.html
Vous pouvez avoir ce problème sans voir aucune erreur, car systemd ignore les directives inconnues. systemd suppose que de nombreuses directives plus récentes peuvent être ignorées et autoriser l'exécution du service.
Il est possible de vérifier manuellement un fichier d'unité pour les directives inconnues. Au moins, il semble fonctionner sur un système récent:
la source
StartLimitBurst
dans la section [Service], mais la documentation indique qu'il devrait être dans la section [Unit]. freedesktop.org/software/systemd/man/systemd.unit.htmlStartLimitIntervalSec=interval, StartLimitBurst=burst Configure unit start rate limiting. Units which are started more than burst times within an interval time interval are not permitted to start any more.
/usr/lib/systemd/systemd --version
et c'était la v219. J'ai besoin de prendre soin de la version systemd.systemd-analyze
. Je vous remercie!systemd-analyze
ne fonctionne que pour les fichiers de service déjà installés, pas sur (disons) un fichier local que vous essayez d'écrire mais pas encore installé. (Du moins, c'est ce qui semble être le cas sur la v219 dans mes tentatives d'utilisation.) Si c'est vrai, cela pourrait valoir la peine de le mentionner dans cette réponse.Je pense avoir trouvé le problème. Tous les documents en ligne suggèrent que tous les paramètres sont dans le fichier UNIT (fichier d' unité systemd ), mais toujours dans mon système (centos 7.5), ils sont dans le fichier de service. Outre le nom est "StartLimitInterval", pas "StartLimitIntervalSec".
la source