Fstab mount'dan sonra çalıştırılacak systemd servisini ayarla


33

Ben üzerinde çalışıyorum systemd .servicebaşlamak gerekiyordu komut sonra CIFS ağ konumu aracılığıyla monte edilir /etc/fstabiçin /mnt/boot-up üzerine.

Komut, önce bir OpenVPN bağımlılık komut dosyasının başlatılmasını bekler, ancak ben de bağlamanın tamamlanmasını beklemesini istiyorum.

/etc/systemd/system/my-daemon.service :

[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service

Çizgiye eklemeye çalıştım systemd.mount: After=network.target vpn-launch.service systemd.mountama umduğum sonuçları vermedi.


systemd-remount-fsListenize eklerseniz işe yarar mı After?
Eric Renouf,

Yanıtlar:


40

CIFS ağ konumu aracılığıyla monte edilir /etc/fstabiçin /mnt/boot-up üzerine.

Hayır öyle değil. Bunu doğru yapın, gerisi doğal olarak yerine oturmaktadır.

Montaj, benzer bir şekilde adlandırılacak (üretilmiş) sistem montaj montaj birimi tarafından gerçekleştirilir mnt-wibble.mount. systemctl list-units --type=mountKomut çıkışında asıl adını görebilirsiniz . Herhangi bir diğer ünite gibi ona detaylı olarak bakabilirsiniz systemctl status.

Çok basit, o zaman: Ünitenize montaj ünitesi başlatıldıktan sonra çalıştırılması emrini vermeniz gerekir.

Sonra = network.target vpn-launch.service mnt-wibble.mount

daha fazla okuma


10
"Systemctl list-unit --type = mount" ile bağlar listesi
nijave

Takipçiler için "wibble" "foobar" gibi kukla bir isim
rogerdpack

17

Üzgünüz, henüz yorum yapamam.

JdeBP'nin dediği gibi, dosya sistemi bağlantısında sipariş vermelisiniz. Montaj biriminin adını tahmin edebilir veya alternatif olarak kullanabilirsiniz (birim bölümünde):

RequiresMountsFor = / mutlak / yol / arasında / montaj

Bu seçenek, servisi başlatmadan önce yolu erişilebilir hale getirmek için uygun *. Tüm sistem sürümlerinde olmayabilir, ancak son 6 aydır bir CentOS 7 makinesinde kullanıyorum.


(Ve vanilya sisteminden farklılıklarınız burada .) RequiresMountsFor=Kendi uyarılarıyla geliyor. İle RedHat hata # 1088057 ve Chris Siebenmann elinde, cevap gerekir superuser.com/questions/988734 . Bu soru da bir CIFS montajı. Ancak sonuç şu ki auto, neyse ki öyle.
JdeBP

@JdeBP Yorumunuz için teşekkür ederiz. Bu özelliğin uyarıları ve sorunlarının farkında değildim.
miguelbernadi

14

Her iki cevap da doğru olsa da, tartışmaya iki kuruş eklemek istiyorum, çünkü aradığımda bazı talimatlar ve nasıl devam edileceğine dair örnekler eksikti.

  1. Dosya sistemini şuraya ekle: /etc/fstab
  2. Tip mount -afstab içinde belirtilen bütün dosya sistemlerini bağlar
  3. Şununla oluşturulmuş sistem birimini arayın:

    systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'

    (biten bir şey döndürmeli .mount)
  4. Bulunan mount birimini dosyadaki After=ifadeye ekle*.service

my-daemonHizmeti önyüklemede başlatmanın bir örneği, ancak ağ hazır olduktan sonra, bir CIFS paylaşımına bağlı /mnt/cifsve vpn-launchhizmet başladı:

/ Etc / fstab

//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0

Not: nofailfstab seçeneklerinizi (örneğin harici bir sürücü kullanırken) eklemek isteyebilirsiniz . Aksi takdirde, cihaz bağlı değilse makineniz açılmaz. Bkz ArchWiki en fstab makaleye


/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

Hizmeti önyüklemede başlatılacak şekilde etkinleştirmeyi unutmayın: systemctl enable my-daemon

Bunun, diğer dosya sistemleri (NFS, HDD'ler, vb.) İçin de geçerli olduğunu unutmayın.

Daha önce de belirtildiği gibi, her iki cevap da doğrudur ve herkesi okumaya teşvik ediyorum ama benim için birkaç örnek bana zaman kazandırdı.

Güncelleme (2019-06-25):

  • Harici sürücüler kullanırken önyükleme kilidini önlemek için fstab seçenekleriyle ilgili bir not eklendi
  • cifs mount başarılı bir şekilde monte edilmediğinde, hatanın başlamasına neden mnt-cifs.mountolan Requires=listeye eklendi .my-daemon.service

Daha açık olmak gerekirse, "mnt-cifs.mount" özel bağlama noktanızın bağlantı biriminin adı systemctl list-units --type=mountnedir?
smdvlpr

1

@ bm-bergmotte: Bana çok yardımcı olan talimatınız için teşekkürler. Benim için sadece işe yarıyor, eğer koyarsam

After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount

"Gerek" in içine "mnt-cifs.mount" koymazsam (ve bu sırada) yeniden başlatma / başlatma için çalışır, ancak yine de cihaz takılı değilse servis başlar. Ek olarak "" Gerekiyor "içine yerleştirdikten sonra, cihaz monte edilmemişse, çalıştırmadan önce servis cihazı monte eder.


Haklısın. Eğer montaj başarısız olursa o zaman my-daemon.service yine de başlatılır. After=sadece emri belirler. Requires=Cif Dağı'nın mevcut olması gerektiğini zorunlu kılar (bkz. Sufiyan Ghori bunun cevabı ). Cevabımı güncelleyeceğim.
bm-bergmotte
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.