systemd attendre que dossier existe avant de démarer service

a marqué ce sujet comme résolu.

Bonjour tous est dans le titre. J’arrive pas à forcer systemd a attendre que un dossier existe avant de démarer mon service, j’ai essayé ces techniques mais aucune ne marche, mon service démarre même si le dossier existe pas.

1
2
3
4
5
6
[Unit]
ConditionPathExists=/tmp/mondossier
RequiresMountsFor=/tmp/mondossier

[Path]
PathExists=/tmp/mondossier

pourquoi rien ne marche ? par avance merci pour votre aide.

j’insiste : je veut attendre que le dossier existe, pas annuler l’exécution du service.

dans les log de mon programme j’ai cette erreur : error: couldn’t chdir to `/tmp/mondossier’: No such file or directory

systemd a démarrer mon programme sans attendre que je crée le dossier /tmp/mondossier

+0 -0

Pour être honnête il s’agit d’un montage nfs mon service doit créer des fichier situé dans mon nfs : /mynfs/mondossier

dans monservice j’ai bien spécifié que le service nfs doit démarrer avant :

1
After=network.target nfs-client.target nfs-client.service

sauf que mon nfs est tres gros et le temps pour qu’il soit monté à 100% prend 1 minutes… du coup mon programme n’arrive pas à écrire dessus car le dossier ou il veut écrire n’a pas encore été monté.

j’ai aussi tenté le TimeoutStartSec=300 sauf que systemd ne semble pas vouloir attendre 5 minutes

c’est comme si tu écrit sous linux :

1
 hostname > /toto/file.txt

tu auras cette erreur :

1
-bash: /toto/file.txt: No such file or directory

car le dossier /toto n’existe pas (enfin pas encore dans mon cas)

+0 -0

Salut,

j’ai aussi tenté le TimeoutStartSec=300 sauf que systemd ne semble pas vouloir attendre 5 minutes

jipete

Cette option précise à systemd d’attendre un certains nombres de secondes avant de considérer que le service à échouer à démarrer. Cependant, ceci implique que la commande qui est exécutée ne rencontre pas d’erreur durant ce laps de temps, ce qui n’est sans doute pas ton cas. Ce genre d’option est plutôt destiné à des services lent comme les services réseaux.

Pour ConditionPathExists, celle-ci vérifie que le chemin existe, si ce n’est pas le cas, le service n’est pas démarré. Enfin, pour RequiresMountsFor, il semble qu’elle est traduite en une paire de Require et After avec pour arguments des fichiers .mount qui doivent être montés à l’endroit précisé.

Essaye peut-être ceci : construit un fichier ton-chemin.mount (où ton-chemin doit être remplacé par ton point de montage sauf que les / deviennent des -, voir par là) comme suit (en adaptant les options de montage).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Unit]
Description=Mount NFS partition

[Mount]
What=<IP serveur>:/ton/chemin
Where=/ton/autre/chemin
Type=nfs
Options=defaults

[Install]
WantedBy=ton-service.service

Puis : systemctl enable ton-chemin.mount.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte