Pracuję na systemd
.service
skrypt, który ma rozpocząć po lokalizacja sieciowa jest zamontowany poprzez CIFS /etc/fstab
aby /mnt/
na rozruchowym.
Skrypt czeka na uruchomienie skryptu zależności OpenVPN, ale chcę też, aby czekał na zakończenie montowania.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Próbowałem dodać systemd.mount
do linii:, After=network.target vpn-launch.service systemd.mount
ale nie dało to wyników, na które liczyłem.
systemd-remount-fs
do swojejAfter
listy?Odpowiedzi:
Nie, nie jest. Zrób to dobrze, a reszta wpasuje się naturalnie.
Podłączenie jest obsługiwane przez (wygenerowaną) systemowo zamontowaną jednostkę montowania, której nazwa zostanie nazwana podobnie
mnt-wibble.mount
. Możesz zobaczyć jego rzeczywistą nazwę na wyjściusystemctl list-units --type=mount
polecenia. Możesz przyjrzeć się temu szczegółowo, tak jak każdej innej jednostcesystemctl status
.Zatem bardzo prosto: musisz nakazać uruchomienie jednostki po uruchomieniu tej jednostki montażowej.
Dalsza lektura
źródło
Przepraszam, ale nie mogę jeszcze komentować.
Jak powiedział JdeBP, należy zamawiać na podstawie systemu plików. Możesz przewidzieć nazwę jednostki montowania lub alternatywnie możesz użyć (w sekcji jednostek):
Ta opcja tworzy zależności do odpowiednich * .mount jednostek, aby ścieżka była dostępna przed uruchomieniem usługi. Może nie być we wszystkich wersjach systemowych, ale używam go na komputerze CentOS 7 przez ostatnie 6 miesięcy.
źródło
RequiresMountsFor=
swój własny zestaw ostrzeżeń. Z błędem RedHat # 1088057 i Chrisem Siebenmannem w dłoni powinieneś być w stanie odpowiedzieć superuser.com/questions/988734 . W tym pytaniu jest to również montaż CIFS. Ale implikacja jest taka, że naauto
szczęście tak jest .Mimo że obie odpowiedzi są poprawne, chcę dodać dwa centy do dyskusji, ponieważ kiedy jej szukałem, brakowało mi instrukcji i przykładów dalszego postępowania.
/etc/fstab
mount -a
który montuje wszystkie systemy plików wymienione w fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(powinna zwrócić coś, co kończy się na
.mount
)After=
instrukcji w*.service
plikuOto przykład uruchomienia
my-daemon
usługi przy rozruchu, ale gdy sieć jest gotowa, podłączany jest udział CIFS/mnt/cifs
ivpn-launch
usługa została uruchomiona:/ etc / fstab
Uwaga: Możesz chcieć dodać
nofail
do opcji fstab (np. Gdy używasz zewnętrznego dysku). W przeciwnym razie komputer nie uruchomi się, jeśli urządzenie nie będzie podłączone. Zobacz artykuł fstab ArchWiki/etc/systemd/system/my-daemon.service
Nie zapomnij włączyć usługi tak, aby była uruchamiana podczas rozruchu:
systemctl enable my-daemon
Pamiętaj, że działa to również w przypadku innych systemów plików (NFS, HDD itp.).
Jak już wspomniano, obie odpowiedzi są poprawne i zachęcam wszystkich do ich przeczytania, ale dla mnie kilka przykładów zaoszczędziłoby mi trochę czasu.
Aktualizacja (25.06.2019):
mnt-cifs.mount
doRequires=
listy, co powodujemy-daemon.service
niepowodzenie uruchamiania, gdy montowanie cifs nie powiodło sięźródło
systemctl list-units --type=mount
?@ bm-bergmotte: dzięki za instrukcję, która bardzo mi pomogła. Dla mnie to po prostu działa, jeśli tak powiem
Jeśli nie wstawię „mnt-cifs.mount” w polu „Wymaga” (i w tej kolejności), działa to w celu ponownego uruchomienia / uruchomienia, ale usługa i tak uruchomi się, jeśli urządzenie nie zostanie zamontowane. Po umieszczeniu go dodatkowo w „Wymaganym” usługa montuje urządzenie przed jego uruchomieniem, jeśli urządzenie nie zostało zamontowane.
źródło
After=
po prostu dyktuje zamówienie.Requires=
sprawia, że obowiązkowe jest montowanie cifs (patrz odpowiedź Sufiyana Ghori na ten temat). Zaktualizuję moją odpowiedź.