Je travaille sur un systemd
.service
script qui est censé démarrer après le montage d'un emplacement réseau CIFS via /etc/fstab
au /mnt/
démarrage.
Le script attend qu'un script de dépendance OpenVPN soit lancé en premier, mais je souhaite également l'attente de la fin du montage.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
J'ai essayé d'ajouter quelque chose systemd.mount
: After=network.target vpn-launch.service systemd.mount
mais cela n'a pas donné les résultats escomptés.
systemd-remount-fs
à votreAfter
liste?Réponses:
Non ce n'est pas. Obtenez ce droit, et le reste tombe naturellement en place.
Le montage est géré par une unité de montage systemd (générée) qui porte le nom suivant
mnt-wibble.mount
. Vous pouvez voir son nom actuel dans le résultat de lasystemctl list-units --type=mount
commande. Vous pouvez le regarder en détail comme n'importe quelle autre unité avecsystemctl status
.Très simplement, alors: vous devez commander le démarrage de votre unité après le démarrage de cette unité de montage.
Lectures complémentaires
la source
Désolé mais je ne peux pas encore commenter.
Comme JdeBP l'a dit, vous devriez commander sur le montage du système de fichiers. Vous pouvez prédire le nom de l'unité de montage ou vous pouvez également utiliser (dans la section de l'unité):
Cette option crée les dépendances vers les unités * .mount appropriées pour rendre le chemin accessible avant de démarrer le service. Cela ne se trouve peut-être pas sur toutes les versions de systemd, mais je l'utilise depuis environ 6 mois sur une machine CentOS 7.
la source
RequiresMountsFor=
Vient avec ses propres mises en garde. Avec le bogue RedHat n ° 1088057 et Chris Siebenmann en main, vous devriez pouvoir répondre à superuser.com/questions/988734 . C'est également un montage CIFS dans cette question. Mais l'implication est que c'estauto
, heureusement.Bien que les deux réponses soient correctes, je souhaite ajouter mes deux cents à la discussion, car lorsque je l'ai recherchée, il me manquait des instructions et des exemples sur la manière de procéder.
/etc/fstab
mount -a
qui monte tous les systèmes de fichiers mentionnés dans fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(devrait renvoyer quelque chose qui se termine par
.mount
)After=
instruction dans le*.service
fichierVoici un exemple de démarrage du
my-daemon
service au démarrage mais une fois le réseau prêt, un partage CIFS est monté sur/mnt/cifs
et levpn-launch
service a démarré:/ etc / fstab
Remarque: vous souhaiterez peut-être ajouter des
nofail
options à votre fstab (par exemple, lorsque vous utilisez un lecteur externe). Sinon, votre ordinateur ne démarrera pas si le périphérique n'est pas connecté. Voir l'article fstab d'ArchWiki/etc/systemd/system/my-daemon.service
N'oubliez pas d'activer le service pour qu'il soit démarré au démarrage:
systemctl enable my-daemon
Notez que cela fonctionne également pour d'autres systèmes de fichiers (NFS, HDD, etc.).
Comme on l'a déjà mentionné, les deux réponses sont correctes et j'encourage tout le monde à les lire, mais quelques exemples m'auraient permis de gagner du temps.
Mise à jour (2019-06-25):
mnt-cifs.mount
à laRequires=
liste qui provoque l'my-daemon.service
échec du démarrage lorsque le montage cifs n'a pas été monté correctementla source
systemctl list-units --type=mount
?@ bm-bergmotte: merci pour votre instruction qui m'a beaucoup aidé. Pour moi, ça fonctionne, si je mets
Si je ne mets pas "mnt-cifs.mount" dans "Nécessite" (et dans cet ordre), cela fonctionne pour le redémarrage / le démarrage, mais le service démarre quand même, si le périphérique n'est pas monté. Après l'avoir ajouté à l'intérieur de "" Requis ", le service monte l'appareil avant de le démarrer, si l'appareil n'a pas été monté.
la source
After=
dicte simplement l'ordre.Requires=
rend obligatoire la présence de la monture cifs (voir la réponse de Sufiyan Ghori à ce sujet). Je mettrai à jour ma réponse.