Aku sedang bekerja pada sebuah systemd
.service
script yang seharusnya dimulai setelah lokasi jaringan CIFS dipasang melalui /etc/fstab
untuk /mnt/
boot-up.
Skrip menunggu skrip dependensi OpenVPN untuk diluncurkan terlebih dahulu, tetapi saya juga ingin skrip menunggu untuk diselesaikan.
/etc/systemd/system/my-daemon.service :
[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service
Saya mencoba menambahkan systemd.mount
ke baris:, After=network.target vpn-launch.service systemd.mount
tetapi tidak memberikan hasil yang saya harapkan.
systemd-remount-fs
keAfter
daftar Anda ?Jawaban:
Tidak, bukan. Lakukan ini dengan benar, dan sisanya jatuh ke tempatnya secara alami.
Mount ditangani oleh unit mount systemd (dihasilkan) yang akan diberi nama seperti
mnt-wibble.mount
. Anda dapat melihat nama aslinya di outputsystemctl list-units --type=mount
perintah. Anda dapat melihatnya secara detail sama seperti unit lainnyasystemctl status
.Sangat sederhana, maka: Anda harus memesan unit Anda untuk memulai setelah unit mount dimulai.
Bacaan lebih lanjut
sumber
Maaf tapi saya belum bisa berkomentar.
Seperti kata JdeBP, Anda harus memesan pada sistem file mount. Anda dapat memprediksi nama unit pemasangan atau, sebagai alternatif, Anda dapat menggunakan (di bagian unit):
Opsi ini menciptakan dependensi ke unit * .mount yang sesuai untuk membuat jalur dapat diakses sebelum memulai layanan. Mungkin tidak pada semua versi systemd, tapi saya sudah menggunakannya di mesin CentOS 7 selama 6 bulan terakhir.
sumber
RequiresMountsFor=
Memang datang dengan serangkaian peringatan sendiri. Dengan RedHat bug # 1088057 dan Chris Siebenmann di tangan, Anda seharusnya dapat menjawab superuser.com/questions/988734 . Ini adalah mount CIFS dalam pertanyaan ini juga. Tapi implikasinya adalahauto
untungnya.Meskipun kedua jawaban itu benar, saya ingin menambahkan dua sen saya ke dalam diskusi, karena ketika saya mencarinya, saya kehilangan beberapa instruksi dan contoh cara melanjutkan.
/etc/fstab
mount -a
yang memasang semua sistem file yang disebutkan di fstabsystemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'
(harus mengembalikan sesuatu yang diakhiri dengan
.mount
)After=
pernyataan dalam*.service
fileBerikut adalah contoh memulai
my-daemon
layanan saat boot tetapi setelah jaringan siap, bagian CIFS dipasang/mnt/cifs
, danvpn-launch
layanan telah dimulai:/ etc / fstab
Catatan: Anda mungkin ingin menambahkan
nofail
opsi fstab Anda (mis. Saat menggunakan drive eksternal). Kalau tidak, mesin Anda tidak akan bisa boot jika perangkat tidak terhubung. Lihat artikel fstab ArchWiki/etc/systemd/system/my-daemon.service
Jangan lupa untuk mengaktifkan layanan sedemikian rupa sehingga dimulai saat boot:
systemctl enable my-daemon
Perhatikan bahwa ini juga berfungsi untuk sistem file lain (NFS, HDD, dll.).
Seperti yang telah disebutkan, kedua jawaban itu benar dan saya mendorong semua orang untuk membacanya, tetapi bagi saya beberapa contoh akan menghemat waktu.
Pembaruan (2019-06-25):
mnt-cifs.mount
keRequires=
daftar yang menyebabkanmy-daemon.service
kegagalan untuk memulai ketika cifs mount tidak berhasil dipasangsumber
systemctl list-units --type=mount
?@ bm-bergmotte: terima kasih atas instruksi Anda yang banyak membantu saya. Bagi saya itu hanya berfungsi, jika saya katakan
Jika saya tidak memasukkan "mnt-cifs.mount" di dalam "Membutuhkan" (dan dalam urutan ini) ia berfungsi untuk reboot / memulai, tetapi layanan tetap akan dimulai, jika perangkat tidak dipasang. Setelah memasukkannya ke dalam "" Membutuhkan "layanan memasang perangkat sebelum memulai, jika perangkat tidak dipasang.
sumber
After=
hanya menentukan perintah.Requires=
mewajibkan cifs mount harus ada (lihat jawaban Sufiyan Ghori untuk yang itu). Saya akan memperbarui jawaban saya.