J'ai rc.local en train de charger un script au démarrage. Vous vous demandez si ce service plante, y a-t-il un moyen de le redémarrer automatiquement?
Au lieu d'utiliser /etc/rc.local
pour les services de longue durée, créez n service systemd . Par exemple, créez /etc/systemd/system/foo.service
, contenant:
[Unit]
Description=Foo
[Service]
Type=simple
ExecStart=/usr/bin/sleep 10
Restart=always
[Install]
WantedBy=default.target
Cela crée un service qui redémarrera la commande à sa mort. Remplacez ExecStart
par votre commande.
Après avoir créé ce fichier, faites:
Sudo systemctl daemon-reload
Sudo systemctl enable foo.service
Sudo systemctl start foo.service
La première commande indiquera à systemctl
de rechercher de nouvelles définitions de service. La seconde active le service en fonction des conditions de démarrage dont il dispose (dans ce cas, commencer par le default.target
, afin qu’il démarre au démarrage). La dernière commande démarre le service pour cette session .
Pour Type
:
Si défini sur
simple
(valeur par défaut si niType=
niBusName=
, maisExecStart=
sont spécifiés), le processus configuré avecExecStart=
est censé être le processus principal du service. Dans ce mode, si le processus offre des fonctionnalités à d'autres processus du système, ses canaux de communication doivent être installés avant le démarrage du démon (par exemple, les sockets configurés par systemd, via l'activation de socket), car systemd procédera immédiatement au suivi. unités.Si défini sur
forking
, il est prévu que le processus configuré avecExecStart=
appelle la fonctionfork()
dans le cadre de son démarrage. Le processus parent est censé se terminer lorsque le démarrage est terminé et que tous les canaux de communication sont configurés. L'enfant continue de s'exécuter en tant que processus démon principal. C'est le comportement des démons UNIX traditionnels. Si ce paramètre est utilisé, il est recommandé d'utiliser également l'optionPIDFile=
, afin que systemd puisse identifier le processus principal du démon. systemd commencera par les unités de suivi dès que le processus parent sera terminé.
Donc, si votre commande vous demande, utilisez Type=forking
et définissez PIDFile
si vous le pouvez.
Pour WantedBy
, exécutez systemctl list-units | grep target
pour rechercher d'autres cibles disponibles que vous pouvez utiliser pour un contrôle plus détaillé.