Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Smokeping et ce de systemd

5 réponses
Avatar
BERTRAND Jo=c3=abl
Bonsoir à tous,

Je viens d'avoir un plantage sévère sur un serveur (kernel panic avec
le dernier noyau de testing). Au redémarrage, je m'aperçois que
smokeping ne se lance pas :

Root rayleigh:[/run] > systemctl status smokeping.service
● smokeping.service - Latency Logging and Graphing System
Loaded: loaded (/lib/systemd/system/smokeping.service; enabled;
vendor preset: enabled)
Active: failed (Result: timeout) since Sun 2019-03-24 18:06:51 CET;
1h 32min ago
Docs: man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf

mars 24 18:05:21 rayleigh smokeping[11095]: All probe processes started
successfully.
mars 24 18:05:21 rayleigh smokeping[11097]: FPing: probing 7 targets
with step 300 s and offset 279 s.
mars 24 18:05:21 rayleigh systemd[1]: smokeping.service: Can't open PID
file /run/smokeping/smokeping.pid (yet
mars 24 18:06:51 rayleigh systemd[1]: smokeping.service: Start operation
timed out. Terminating.
mars 24 18:06:51 rayleigh smokeping[11095]: Got TERM signal, terminating
child processes.
mars 24 18:06:51 rayleigh smokeping[11096]: got TERM signal, terminating.
mars 24 18:06:51 rayleigh smokeping[11097]: got TERM signal, terminating.
mars 24 18:06:51 rayleigh smokeping[11095]: All child processes
successfully terminated, exiting.
mars 24 18:06:51 rayleigh systemd[1]: smokeping.service: Failed with
result 'timeout'.
mars 24 18:06:51 rayleigh systemd[1]: Failed to start Latency Logging
and Graphing System.

Très bien. Un tour dans les logs (les vrais) donne :

Mar 24 18:05:21 rayleigh smokeping[11086]: Starting syslog logging
Mar 24 18:05:21 rayleigh smokeping[11086]: Note: logging to syslog as
local0/info.
Mar 24 18:05:21 rayleigh smokeping[11086]: Daemonizing
/usr/sbin/smokeping ...
Mar 24 18:05:21 rayleigh smokeping[11086]: creating
/var/run/smokeping.pid: Permission denied
Mar 24 18:05:21 rayleigh smokeping[11095]: Smokeping version 2.007003
successfully launched.
Mar 24 18:05:21 rayleigh smokeping[11095]: Entering multiprocess mode.
Mar 24 18:05:21 rayleigh smokeping[11095]: Child process 11096 started
for probe FPing6.
Mar 24 18:05:21 rayleigh smokeping[11096]: FPing6: probing 2 targets
with step 300 s and offset 201 s.
Mar 24 18:05:21 rayleigh smokeping[11095]: Child process 11097 started
for probe FPing.
Mar 24 18:05:21 rayleigh smokeping[11095]: All probe processes started
successfully.
Mar 24 18:05:21 rayleigh smokeping[11097]: FPing: probing 7 targets with
step 300 s and offset 279 s.
Mar 24 18:05:21 rayleigh systemd[1]: smokeping.service: Can't open PID
file /run/smokeping/smokeping.pid (yet?) after start: No such file or
directory
Mar 24 18:06:51 rayleigh systemd[1]: smokeping.service: Start operation
timed out. Terminating.
Mar 24 18:06:51 rayleigh smokeping[11095]: Got TERM signal, terminating
child processes.
Mar 24 18:06:51 rayleigh smokeping[11096]: got TERM signal, terminating.
Mar 24 18:06:51 rayleigh smokeping[11097]: got TERM signal, terminating.
Mar 24 18:06:51 rayleigh smokeping[11095]: All child processes
successfully terminated, exiting.
Mar 24 18:06:51 rayleigh systemd[1]: smokeping.service: Failed with
result 'timeout'.

Ce qui est intéressant, c'est le "creating /var/run/smokeping.pid:
Permission denied".

Et là, je ne comprends pas. smokeping se lance en tant que smokeping.
Mais systemd le sait, c'est sans son fichier de configuration :

[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog

Je n'ai pas touché à ce fichier, il y assez de choses pas maîtrisées
dans systemd (par les concepteurs, il suffit de regarder la non
répétabilité des séquences de démarrage sur des serveurs chargés en
daemons de tous genres) pour que je n'y mette pas les mains.

D'autres daemons ont exactement la même configuration (à savoir User et
Group) et ne posent pas de problème particulier.

D'où ma question : où est le problème et comment le corriger ? Je
précise à toutes fins utiles qu'avant ce kernel panic, smokeping se
lançait parfaitement bien (noyau 4.19.0-1, panic avec le 4.19.0-2 - je
ne sais pas si smokeping tournait -, lancement impossible avec le 4.19.0-4).

Bien cordialement,

JKB

5 réponses

Avatar
Lucas Nussbaum
(Merci de me Cc les réponses éventuelles, je ne suis pas la liste de
près)
Bonsoir,
On 24/03/19 at 19:46 +0100, BERTRAND Joël wrote:
Bonsoir à tous,
Je viens d'avoir un plantage sévère sur un serveur (kernel panic avec
le dernier noyau de testing). Au redémarrage, je m'aperçois que
smokeping ne se lance pas :
Root rayleigh:[/run] > systemctl status smokeping.service
● smokeping.service - Latency Logging and Graphing System
Loaded: loaded (/lib/systemd/system/smokeping.service; enabled;
vendor preset: enabled)
Active: failed (Result: timeout) since Sun 2019-03-24 18:06:51 CET;
1h 32min ago
Docs: man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf
mars 24 18:05:21 rayleigh smokeping[11095]: All probe processes started
successfully.
mars 24 18:05:21 rayleigh smokeping[11097]: FPing: probing 7 targets
with step 300 s and offset 279 s.
mars 24 18:05:21 rayleigh systemd[1]: smokeping.service: Can't open PID
file /run/smokeping/smokeping.pid (yet
mars 24 18:06:51 rayleigh systemd[1]: smokeping.service: Start operation
timed out. Terminating.
mars 24 18:06:51 rayleigh smokeping[11095]: Got TERM signal, terminating
child processes.
mars 24 18:06:51 rayleigh smokeping[11096]: got TERM signal, terminating.
mars 24 18:06:51 rayleigh smokeping[11097]: got TERM signal, terminating.
mars 24 18:06:51 rayleigh smokeping[11095]: All child processes
successfully terminated, exiting.
mars 24 18:06:51 rayleigh systemd[1]: smokeping.service: Failed with
result 'timeout'.
mars 24 18:06:51 rayleigh systemd[1]: Failed to start Latency Logging
and Graphing System.
Très bien.

Donc, systemd démarre smokeping, s'attend à ce qu'il crée un fichier
avec son PID (/run/smokeping/smokeping.pid), mais il ne le fait pas,
donc systemd décide qu'il n'a pas démarré correctement, et l'arrête.
Un tour dans les logs (les vrais) donne :
Mar 24 18:05:21 rayleigh smokeping[11086]: Starting syslog logging
Mar 24 18:05:21 rayleigh smokeping[11086]: Note: logging to syslog as
local0/info.
Mar 24 18:05:21 rayleigh smokeping[11086]: Daemonizing
/usr/sbin/smokeping ...
Mar 24 18:05:21 rayleigh smokeping[11086]: creating
/var/run/smokeping.pid: Permission denied
Mar 24 18:05:21 rayleigh smokeping[11095]: Smokeping version 2.007003
successfully launched.
Mar 24 18:05:21 rayleigh smokeping[11095]: Entering multiprocess mode.
Mar 24 18:05:21 rayleigh smokeping[11095]: Child process 11096 started
for probe FPing6.
Mar 24 18:05:21 rayleigh smokeping[11096]: FPing6: probing 2 targets
with step 300 s and offset 201 s.
Mar 24 18:05:21 rayleigh smokeping[11095]: Child process 11097 started
for probe FPing.
Mar 24 18:05:21 rayleigh smokeping[11095]: All probe processes started
successfully.
Mar 24 18:05:21 rayleigh smokeping[11097]: FPing: probing 7 targets with
step 300 s and offset 279 s.
Mar 24 18:05:21 rayleigh systemd[1]: smokeping.service: Can't open PID
file /run/smokeping/smokeping.pid (yet?) after start: No such file or
directory
Mar 24 18:06:51 rayleigh systemd[1]: smokeping.service: Start operation
timed out. Terminating.
Mar 24 18:06:51 rayleigh smokeping[11095]: Got TERM signal, terminating
child processes.
Mar 24 18:06:51 rayleigh smokeping[11096]: got TERM signal, terminating.
Mar 24 18:06:51 rayleigh smokeping[11097]: got TERM signal, terminating.
Mar 24 18:06:51 rayleigh smokeping[11095]: All child processes
successfully terminated, exiting.
Mar 24 18:06:51 rayleigh systemd[1]: smokeping.service: Failed with
result 'timeout'.
Ce qui est intéressant, c'est le "creating /var/run/smokeping.pid:
Permission denied".

oui. Car du coup, ça veut dire que smokeping essaie de créer un fichier
.pid, mais pas à l'endroit attendu dans le fichier .service. Même s'il
avait réussi, systemd ne l'aurait pas trouvé et l'aurait tué.
Et là, je ne comprends pas. smokeping se lance en tant que smokeping.
Mais systemd le sait, c'est sans son fichier de configuration :
[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog

Qu'as-tu juste après ? Dans le paquet, j'ai:
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
qui demande donc à smokeping d'écrire son fichier .pid dans
/run/smokeping.
Donc, soit:
- cette ligne n'est pas présente
- cette ligne ne fonctionne pas
Lucas
Avatar
BERTRAND Jo=c3=abl
Lucas Nussbaum a écrit :
Qu'as-tu juste après ? Dans le paquet, j'ai:
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
qui demande donc à smokeping d'écrire son fichier .pid dans
/run/smokeping.
Donc, soit:
- cette ligne n'est pas présente
- cette ligne ne fonctionne pas

Voici le fichier complet (jamais touché) :
Root rayleigh:[/lib/systemd/system] > cat smokeping.service
[Unit]
Description=Latency Logging and Graphing System
Documentation=man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf
After=network.target
[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog
# If you need to run smokeping in slave/master mode, see the example unit
# override in /usr/share/doc/smokeping/examples/systemd/slave_mode.conf
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Root rayleigh:[/lib/systemd/system] >
Naturellement, /run existe et un lien /var/run vers /run existe aussi.
Bien cordialement,
JKB
Avatar
Lucas Nussbaum
On 24/03/19 at 22:26 +0100, BERTRAND Joël wrote:
Lucas Nussbaum a écrit :
Qu'as-tu juste après ? Dans le paquet, j'ai:
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
qui demande donc à smokeping d'écrire son fichier .pid dans
/run/smokeping.
Donc, soit:
- cette ligne n'est pas présente
- cette ligne ne fonctionne pas

Voici le fichier complet (jamais touché) :
Root rayleigh:[/lib/systemd/system] > cat smokeping.service
[Unit]
Description=Latency Logging and Graphing System
Documentation=man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf
After=network.target
[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog
# If you need to run smokeping in slave/master mode, see the example unit
# override in /usr/share/doc/smokeping/examples/systemd/slave_mode.conf
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Root rayleigh:[/lib/systemd/system] >
Naturellement, /run existe et un lien /var/run vers /run existe aussi.

Et quand tu lances smokeping à la main avec /usr/sbin/smokeping
--pid-dir=/run/smokeping, où crée-t-il smokeping.pid ?
est-ce que tu peux faire 'systemctl cat smokeping.service' pour vérifier
que tu as bien le même contenu que ci-dessus (cad que tu n'as pas
d'overrides dans /etc) ?
Lucas
Avatar
BERTRAND Jo=c3=abl
Lucas Nussbaum a écrit :
Et quand tu lances smokeping à la main avec /usr/sbin/smokeping
--pid-dir=/run/smokeping, où crée-t-il smokeping.pid ?
est-ce que tu peux faire 'systemctl cat smokeping.service' pour vérifier
que tu as bien le même contenu que ci-dessus (cad que tu n'as pas
d'overrides dans /etc) ?

Root rayleigh:[/lib/systemd/system] > systemctl cat smokeping.service
# /lib/systemd/system/smokeping.service
[Unit]
Description=Latency Logging and Graphing System
Documentation=man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf
After=network.target
[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog
# If you need to run smokeping in slave/master mode, see the example unit
# override in /usr/share/doc/smokeping/examples/systemd/slave_mode.conf
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Root rayleigh:[/lib/systemd/system] >
Ça semble bien être la même chose (petite remarque en passant, le truc
qui intercepte les scripts SysV me semble lui aussi être une connerie
sans nom au fonctionnement aléatoire dans le machin systemd, on est bien
loin du KISS du monde Unix...).
Si je lance le daemon à la main :
Root rayleigh:[/lib/systemd/system] > /usr/sbin/smokeping
--pid-dir=/run/smokeping
je récupère un pid dans /run :
Root rayleigh:[/lib/systemd/system] > ls /run/
...
smokeping.pid
...
Je pensais naïvement qu'il devait être dans /run/smokeping/smokeping.pid...
Même si je crée avant de lancer smokeping un répertoire /run/smokeping,
je me retrouve avec le pid dans /run/smokeping.pid.
Bien cordialement,
JB
Avatar
Lucas Nussbaum
On 25/03/19 at 07:24 +0100, BERTRAND Joël wrote:
Lucas Nussbaum a écrit :
Et quand tu lances smokeping à la main avec /usr/sbin/smokeping
--pid-dir=/run/smokeping, où crée-t-il smokeping.pid ?
est-ce que tu peux faire 'systemctl cat smokeping.service' pour vérifier
que tu as bien le même contenu que ci-dessus (cad que tu n'as pas
d'overrides dans /etc) ?

Root rayleigh:[/lib/systemd/system] > systemctl cat smokeping.service
# /lib/systemd/system/smokeping.service
[Unit]
Description=Latency Logging and Graphing System
Documentation=man:smokeping(1)
file:/usr/share/doc/smokeping/examples/systemd/slave_mode.conf
After=network.target
[Service]
# It would in theory be simpler to run smokeping with the --nodaemon
option and
# Type=simple, but smokeping does not work properly when in "slave" mode
with
# --nodaemon set.
Type=forking
RuntimeDirectory=smokeping
PIDFile=/run/smokeping/smokeping.pid
User=smokeping
Group=smokeping
StandardError=syslog
# If you need to run smokeping in slave/master mode, see the example unit
# override in /usr/share/doc/smokeping/examples/systemd/slave_mode.conf
ExecStart=/usr/sbin/smokeping --pid-dir=/run/smokeping
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Root rayleigh:[/lib/systemd/system] >
Ça semble bien être la même chose (petite remarque en passant, le truc
qui intercepte les scripts SysV me semble lui aussi être une connerie
sans nom au fonctionnement aléatoire dans le machin systemd, on est bien
loin du KISS du monde Unix...).
Si je lance le daemon à la main :
Root rayleigh:[/lib/systemd/system] > /usr/sbin/smokeping
--pid-dir=/run/smokeping
je récupère un pid dans /run :
Root rayleigh:[/lib/systemd/system] > ls /run/
...
smokeping.pid
...
Je pensais naïvement qu'il devait être dans /run/smokeping/smokeping.pid...
Même si je crée avant de lancer smokeping un répertoire /run/smokeping,
je me retrouve avec le pid dans /run/smokeping.pid.

Voila, donc à la fin, c'est un probleme coté smokeping qui ne semble pas
respecter l'option --pid-dir. Rien à voir avec systemd. Je t'invite à
ouvrir un bug sur le paquet smokeping.
Lucas