Page 1 sur 2
[systemd reflector] Je veux une unit qui fonctionne (résolu)
Publié : sam. 07 juin 2014, 02:40
par Moviuro
Plop,
Pour exprimer mon état à l'écriture de ce post, je vais utiliser ça :

Voilà, ça c'est ma tête.
Maintenant :
Malgré tous mes efforts pour comprendre (aïe, ma tête) et tester (pusieurs semaines sans succès !) différents services, je rends les armes :
Code : Tout sélectionner
# cat /etc/systemd/system/timer-daily.target.wants/reflector.service
[Unit]
Description=Update mirorlist
Requires=network-online.target
[Service]
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Type=simple
TimeoutSec=600
Restart=on-failure
ExecStart=-/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist
Trop cool, non ? Sauf que ça foire comme un veau :
Code : Tout sélectionner
root@schizophrenia ~ # systemctl status reflector.service
● reflector.service - Update mirorlist
Loaded: loaded (/etc/systemd/system/timer-daily.target.wants/reflector.service)
Active: inactive (dead) since Sat 2014-06-07 00:00:12 CEST; 2h 31min ago
Process: 17052 ExecStart=/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist (code=exited, status=1/FAILURE)
Main PID: 17052 (code=exited, status=1/FAILURE)
Jun 07 00:00:02 schizophrenia systemd[1]: Starting Update mirorlist...
Jun 07 00:00:02 schizophrenia systemd[1]: Started Update mirorlist.
Jun 07 00:00:12 schizophrenia reflector[17052]: error: failed to retrieve mirror data: (The read operation timed out)
3 root@schizophrenia ~ # date
Sat Jun 7 02:32:20 CEST 2014
Donc :
- Le restart on-failure fait pas son boulot ou systemd fait exprès de donner des noms trompeurs aux champs des units. (clairement, c'est vraiment ce qui me casse les pieds en ce moment)
- C'est quoi l'utilité de
network-online.target
? sa définition ? Comment je dis que network-online, c'est pouvoir ping une machine loin avec son nom et pas son IP ?
Voilà, je vous supplie de mettre fin à ma souffrance (soit en me disant de passer à *BSD, soit en résolvant ce problème).
EDIT: l'unit s'est relancée sur mon autre PC, en accord avec le timer quotidien. Donc
le timer ne s'arrête pas en cas d'échec, c'est cool. (Liste des miroirs créée la dernière fois le 2 juin mais l'unit a été lancée ce matin, le 7 juin)
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : sam. 07 juin 2014, 11:48
par FoolEcho
Salut,
Pas de faux-espoirs à te communiquer, vu que les questions de timer avec systemd sont sur ma liste «des trucs à regarder» (
depuis que cronie a été sorti du groupe base... donc ça fait un moment déjà)...
Tu as regardé aussi du côté des discussions sur ce sujet ?
https://wiki.archlinux.org/index.php/Ta ... uggestions
Moviuro a écrit :ExecStart=-/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist
Mais sinon... Il ne faut pas protéger la regexp ?
Code : Tout sélectionner
/usr/bin/reflector -i "(fr|nl|be)." -f 5 --save /etc/pacman.d/mirrorlist
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : sam. 07 juin 2014, 12:14
par Moviuro
Nope, je connaissais pas, mais visiblement c'est le caca partout
FoolEcho a écrit :Moviuro a écrit :ExecStart=-/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist
Mais sinon... Il ne faut pas protéger la regexp ?
Code : Tout sélectionner
/usr/bin/reflector -i "(fr|nl|be)." -f 5 --save /etc/pacman.d/mirrorlist
Non, ma commande est bien correcte puiqu'elle crache des fichiers propres correspondants :
Code : Tout sélectionner
% cat /etc/pacman.d/mirrorlist
[...]
# With: reflector -i '(fr|nl|be).' -f 5 --verbose --save /etc/pacman.d/mirrorlist
[...]
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : sam. 07 juin 2014, 20:09
par mélodie
Moviuro a écrit :
Nope, je connaissais pas, mais visiblement c'est le caca partout

Bonjour,
En ce cas, je suggère d'aller voir si un rapport de bug existe, si oui, ajouter ton témoignage, si non, en créer un.
https://bugs.archlinux.org/
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : sam. 07 juin 2014, 20:14
par Moviuro
mélodie a écrit :En ce cas, je suggère d'aller voir si un rapport de bug existe, si oui, ajouter ton témoignage, si non, en créer un.
https://bugs.archlinux.org/
hahaha, la bonne blague. Naaaan, les archeux anglophones vont m'envoyer ch*er comme un malpropre pour un problème aussi peu intéressant que ça et qui ne requiert que quelques heures de pensée, quelques touffes de cheveux arrachées

Par contre, il semble qu'une solution se dessine sur IRC en ce moment, je ferai un rapport complet ici. Et j'irai compléter notre wiki après et proposer aux anglophones encore après.
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : sam. 07 juin 2014, 23:15
par benjarobin
Ton problème me semble assez simple personnellement à résoudre... Il suffit de lire le man de systemd, et non essayer des options qui n'ont aucune cohérence entre elles. Désolé si la remarque te semble agressive, elle ne l'est pas.
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : dim. 08 juin 2014, 12:41
par Moviuro
Merci benjarobin, tu fais exactement ce que tout le monde m'a fait jusqu'à maintenant : me dire que c'est facile. Merci ! Merci !
Peut-être que c'est facile mais pourquoi vous m'aidez pas !? J'ai lu les man ! Je les comprends pas ! Donc arrêtez de polluer le fil avec des réponses inutiles et aidez-moi une bonne fois pour toutes.
Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : dim. 08 juin 2014, 13:11
par benjarobin
Désolé, j'ai juste oublié de rajouter dans mon message précédent que si dimanche ou lunfi j'ai 5 min, j'essayerai de te pondre un truc fonctionnel. Désolé, c'est juste un oubli, j'ai du être interrompu lors de la rédaction de mon message par autre chose entre temps...
Par contre Moviuro ton dernier message ne donne pas vraiment envie de t'aider, mais je comprends très bien ta frustration

Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : dim. 08 juin 2014, 15:00
par Moviuro

En attendant, je vais ouvrir un nouveau post pour un autre souci que j'ai

Re: [systemd, reflector] Je veux une 'unit' qui fonctionne
Publié : mer. 11 juin 2014, 20:37
par Moviuro
Bon alors,
ça y est, j'ai un truc qui fonctionne comme attendu.
L'unit suivante teste le ping vers un hôte spécifié après le '
@
'. Si l'hôte ne répond pas, on réessaye.
L'unit s'arrête une fois qu'elle a dit 'SUCCESS' donc à chaque fois qu'une unit appellera
reachable-retry
, on a la certitude d'avoir une connexion au-dit hôte.
Code : Tout sélectionner
# cat /etc/systemd/system/reachable-retry@.service
[Unit]
Description=Test if %i is reachable
After=systemd-networkd-wait-online.service
# Customize to your own needs, with network.target or whatever works less worse with you
[Service]
Type=forking
ExecStart=/usr/bin/ping -c1 %i
Restart=on-failure
[Install]
WantedBy=multi-user.target
On ajoute les dépendances dans les services :
Code : Tout sélectionner
# cat /etc/systemd/system/timer-daily.target.wants/reflector.service
[Unit]
Description=Update mirorlist
# Fire up the tester
Requires=reachable-retry@www.archlinux.org.service
# Wait for it to return SUCCESS
After=reachable-retry@www.archlinux.org.service
[Service]
# Copied from wiki
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Type=simple
TimeoutSec=600
Restart=on-failure
ExecStart=-/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist
# Customize to your own needs
Voilà, donc des heures sur IRC, à lire des man pour pondre ces 11

malheureuses lignes !
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : mer. 11 juin 2014, 21:00
par benjarobin
Désolé j'avais encore oublié de te répondre. Je t'aurais répondu ceci qui est très similaire à ta solution :
Utilisation du paquet de AUR :
network-wait-online ainsi que le PKGBUILD suivant :
Code : Tout sélectionner
# cat /etc/systemd/system/timer-daily.target.wants/reflector.service
[Unit]
Description=Update mirorlist
After=network.target
[Service]
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Type=simple
TimeoutSec=600
Restart=on-failure
ExecStart=-/usr/bin/reflector -i (fr|nl|be). -f 5 --save /etc/pacman.d/mirrorlist
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 00:06
par Moviuro
Pas de soucis,
L'avantage de ma méthode, c'est que ça n'utilise pas de scripts ou autre, juste pur systemd (et ping, OK).
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 00:27
par mélodie
Moviuro a écrit :Pas de soucis,
L'avantage de ma méthode, c'est que ça n'utilise pas de scripts ou autre, juste pur systemd (et ping, OK).
Salut,
Tu nous a parlé de mettre à jour notre wiki lors d'un post précédent ?

C'est toujours bienvenu d'autant qu'il n'y a pas de page pour Reflector sur le wiki archlinux.fr.

Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 08:15
par Reventlov
Je comprends pas l'utilisation de Type=fork:
« If set to forking, it is expected that the process configured with ExecStart= will call fork() as part of its start-up. »
C'est pas le cas de ping, j'ai l'impression, et donc si ça fonctionne ça me semble plus un "hack" qu'autre chose.
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 09:11
par benjarobin
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 09:37
par Reventlov
Le problème, c'est que le type oneshot ne supporte pas autre chose que "no" pour le paramètre Restart. J'ai ouvert un thread similaire sur le forum anglophone:
https://bbs.archlinux.org/viewtopic.php?pid=1424891
Le but est de comprendre/d'apprendre un peu mieux comment systemd fonctionne.
Par ailleurs, j'utilise le service de moviuro qui fonctionne très bien

. Mais je comprends pas exactement pourquoi.
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 09:40
par Moviuro
Avec le type oneshot
, il n'y a aucune chance que le service redémarre...
Et pour le fork, c'est parce que l'unit attend le retour de ping avant de dire SUCCESS ou FAILURE. Si je le mets en "normal", bah reachable-retry@
est lancé et reflector n'attend pas de savoir si reachable-retry@
renvoit SUCCESS.
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 09:48
par Reventlov
Le problème c'est que la doc précise que ping devrait forker. Or ce n'est pas le cas.
Et non, mon but n'est pas d'avoir un service ping qui se relancerait automatiquement, mais d'avoir un service qui dépend du résultat du oneshot ping pour se lancer.
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 10:34
par benjarobin
@Reventlov C'est pour cela que j'avais créé un paquet nommé network-wait-online .
Re: [systemd reflector] Je veux une unit qui fonctionne (rés
Publié : jeu. 12 juin 2014, 12:14
par Moviuro
mélodie a écrit :Tu nous a parlé de mettre à jour notre wiki lors d'un post précédent ?

C'est toujours bienvenu d'autant qu'il n'y a pas de page pour Reflector sur le wiki archlinux.fr.

C'est fait, cheffe !
https://wiki.archlinux.fr/Reflector