-
failed
- se produit lorsqu'une unité est entrée dans un état d'échec et peut être réinitialisée avec la fonction systemctl reset-failed
commande
-
not-found
- se produit lorsque vous avez supprimé une unité mais que systemd a toujours une référence à celle-ci, comme lorsqu'une unité est activée et qu'un lien symbolique est placé dans le répertoire /etc/systemd/system
ce problème peut être corrigé en supprimant les références à l'unité dans les documents suivants /etc/system/systemd/*.wants/
puis en cours d'exécution systemctl daemon-reload
Par exemple, supposez le bash script suivant :
#!/bin/bash
# script.sh
while true
do
sleep 1
done
Et 3 unités systemd : example-foo.service
, example-bar.service
et example-baz.service
$ sudo systemctl cat example-{foo,bar,baz}.service
# /etc/systemd/system/example-foo.service
[Service]
ExecStart=/home/vagrant/script.sh
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/example-bar.service
[Service]
ExecStart=/home/vagrant/script.sh
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/example-baz.service
[Service]
ExecStart=/home/vagrant/script.sh
[Install]
WantedBy=multi-user.target
Maintenant, démarrons et activons les unités. Observez comment les liens symboliques sont créés.
$ sudo systemctl start example-{foo,bar,baz}.service
$ sudo systemctl enable example-{foo,bar,baz}.service
Created symlink from /etc/systemd/system/multi-user.target.wants/example-foo.service to /etc/systemd/system/example-foo.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/example-bar.service to /etc/systemd/system/example-bar.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/example-baz.service to /etc/systemd/system/example-baz.service.
Confirmez qu'il y a en fait 6 fichiers pour nos 3 unités.
$ find /etc/systemd/system -name 'example*.service'
/etc/systemd/system/multi-user.target.wants/example-bar.service
/etc/systemd/system/multi-user.target.wants/example-foo.service
/etc/systemd/system/multi-user.target.wants/example-baz.service
/etc/systemd/system/example-bar.service
/etc/systemd/system/example-foo.service
/etc/systemd/system/example-baz.service
Maintenant, vérifiez l'état des 3 unités, elles sont en marche.
$ systemctl list-units example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-bar.service loaded active running example-bar.service
example-baz.service loaded active running example-baz.service
example-foo.service loaded active running example-foo.service
Maintenant, simulez un échec en envoyant un SIGKILL à example-foo.service
. Observez comment l'unité est dans un état d'échec.
$ sudo systemctl kill -s KILL example-foo.service
$ systemctl list-units example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-bar.service loaded active running example-bar.service
example-baz.service loaded active running example-baz.service
example-foo.service loaded failed failed example-foo.service
Pour réinitialiser une unité en état d'échec, utilisez la fonction systemctl rese-failed
commande. Observez comment l'unité est maintenant dans un état inactif.
$ sudo systemctl reset-failed
$ systemctl list-units example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-bar.service loaded active running example-bar.service
example-baz.service loaded active running example-baz.service
...
$ systemctl list-units --all example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-bar.service loaded active running example-bar.service
example-baz.service loaded active running example-baz.service
example-foo.service loaded inactive dead example-foo.service
Ok, maintenant supprimons l'unité example-bar.service. Observez comment l'unité est dans un état non trouvé ; cependant, le lien symbolique brisé de example-bar.service est toujours dans /etc/system/system/multi-user.target.wants.
$ sudo rm /etc/systemd/system/example-bar.service
$ sudo systemctl daemon-reload
$ sudo systemctl stop example-bar.service
Failed to stop example-bar.service: Unit example-bar.service not loaded.
$ systemctl list-units --all example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-bar.service not-found inactive dead example-bar.service
example-baz.service loaded active running example-baz.service
example-foo.service loaded inactive dead example-foo.service
$ find /etc/systemd/system -name 'example*.service'
/etc/systemd/system/multi-user.target.wants/example-bar.service
/etc/systemd/system/multi-user.target.wants/example-foo.service
/etc/systemd/system/multi-user.target.wants/example-baz.service
/etc/systemd/system/example-foo.service
/etc/systemd/system/example-baz.service
Supprimez le lien symbolique cassé et confirmez que l'unité example-bar.service a disparu.
$ sudo rm /etc/systemd/system/multi-user.target.wants/example-bar.service
$ sudo systemctl daemon-reload
$ systemctl list-units --all example*
UNIT LOAD ACTIVE SUB DESCRIPTION
example-baz.service loaded active running example-baz.service
example-foo.service loaded inactive dead example-foo.service