Je développe ou j'ai développé un fichier d'unité pour systemd
[Unit]
Description=FreeRADIUS multi-protocol policy server
After=syslog.target network.target
Documentation=man:radiusd(8) man:radiusd.conf(5) http://wiki.freeradius.org/ http://networkradius.com/doc/
[Service]
EnvironmentFile=-/etc/sysconfig/radiusd
ExecStartPre=/usr/sbin/radiusd $FREERADIUS_OPTIONS -Cxm -lstdout
ExecStart=/usr/sbin/radiusd $FREERADIUS_OPTIONS -fm
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
Un problème survient lorsque l'on appelle systemctl radiusd start
ne renvoie pas de code d'erreur, même si /usr/sbin/radiusd -fm
sort avec un.
Existe-t-il un moyen de faire en sorte que systemctl agisse de manière synchrone, c'est-à-dire qu'il attende un certain temps avant de revenir et d'indiquer que le service a été démarré avec succès ou non.
Je ne vois pas d'inconvénient à ce que l'on passe à Type=forking
ou l'une des autres options, comme dbus (et écrire le code pour intégrer dbus) si cela signifie que systemctl sortira avec une erreur indiquant que le service n'a pas pu démarrer.
Pour devancer la question évidente, oui, après le démarrage, systemd considère que l'unité est en panne.
bash-4.2# systemctl status radiusd
radiusd.service - FreeRADIUS multi-protocol policy server
Loaded: loaded (/usr/lib/systemd/system/radiusd.service; enabled)
Active: failed (Result: start-limit) since Wed 2015-08-12 12:26:18 EDT; 19s ago
Docs: man:radiusd(8)
man:radiusd.conf(5)
http://wiki.freeradius.org/
http://networkradius.com/doc/
Process: 10610 ExecStart=/usr/sbin/radiusd $FREERADIUS_OPTIONS -fm (code=exited, status=1/FAILURE)
Main PID: 10610 (code=exited, status=1/FAILURE)
et oui systemctl status radiusd
renvoie un code de sortie différent de 0. Il est juste ennuyeux d'intégrer cela à la pile de sel. Actuellement, sans démarrage synchrone, la pile saltstack pkg
signale que le service fonctionne, après avoir appliqué les mises à jour de la configuration et du code qui provoquent des défaillances du service.