Je travaille sur un systemd
.service
script censé démarrer après un emplacement réseau CIFS est monté via /etc/fstab
à /mnt/
au démarrage.
Le script attend le lancement d'un script de dépendance OpenVPN en premier, mais je veux également qu'il attende 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 systemd.mount
à la ligne: After=network.target vpn-launch.service systemd.mount
, mais cela n'a pas donné les résultats que j'espérais.
un emplacement réseau CIFS est monté via
/etc/fstab
à/mnt/
au démarrage.
Non, ça ne l'est pas. Faites les choses correctement et le reste se met en place naturellement.
Le montage est géré par une unité de montage (générée) systemd qui sera nommée quelque chose comme mnt-wibble.mount
. Vous pouvez voir son nom réel dans la sortie de systemctl list-units --type=mount
commande. Vous pouvez le regarder en détail comme n'importe quelle autre unité avec systemctl status
.
Très simplement, alors: vous devez commander le démarrage de votre unité après le démarrage de cette unité de montage.
Après = network.target vpn-launch.service mnt-wibble.mount
Désolé mais je ne peux pas encore commenter.
Comme l'a dit JdeBP, vous devriez commander sur le support du système de fichiers. Vous pouvez prédire le nom de l'unité de montage ou, alternativement, vous pouvez utiliser (dans la section unité):
RequirementsMountsFor =/absolu/chemin/de/montage
Cette option crée les dépendances des unités * .mount appropriées pour rendre le chemin accessible avant de démarrer le service. Il n'est peut-être pas sur toutes les versions de systemd, mais je l'utilise dans une machine CentOS 7 depuis environ 6 mois.
Bien que les deux réponses soient correctes, je veux ajouter mes deux cents à la discussion, car lorsque je l'ai recherchée, il me manquait des instructions et des exemples de procédure.
/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 }'
.mount
)After=
instruction dans le *.service
fichierVoici un exemple de démarrage de my-daemon
service au démarrage mais une fois le réseau prêt, un partage CIFS est monté sur /mnt/cifs
, et le vpn-launch
le service a démarré:
/etc/fstab
//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0
Remarque: vous souhaiterez peut-être ajouter nofail
à vos options fstab (par exemple lorsque vous utilisez un lecteur externe). Sinon, votre machine ne démarrera pas si l'appareil n'est pas connecté. Voir article fstab d'ArchWiki
/etc/systemd/system/my-daemon.service
[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service mnt-cifs.mount
After=network.target vpn-launch.service mnt-cifs.mount
[Service]
ExecStart=/path/to/my-daemon
[Install]
WantedBy=multi-user.target
N'oubliez pas d'activer le service pour qu'il démarre au démarrage: systemctl enable my-daemon
Notez que cela fonctionne également pour d'autres systèmes de fichiers (NFS, disques durs, etc.).
Comme déjà mentionné, les deux réponses sont correctes et j'encourage tout le monde à les lire, mais pour moi, quelques exemples m'auraient fait gagner du temps.
Mise à jour (2019-06-25):
mnt-cifs.mount
à la Requires=
liste qui provoque le my-daemon.service
échec au démarrage lorsque le montage cifs n'a pas été correctement monté@ bm-bergmotte: merci pour vos instructions qui m'ont beaucoup aidé. Pour moi ça marche, si je mets
After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount
Si je ne mets pas "mnt-cifs.mount" à l'intérieur du "Requiert" (et dans cet ordre) cela fonctionne pour le redémarrage/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 "" Requiert ", le service monte l'appareil avant de le démarrer, si l'appareil n'a pas été monté.