Yanıtlar:
Yorumda belirtildiği gibi, man sayfası sorunuzu cevaplar. Web'den:
= istiyor
Gereksinim = 'in daha zayıf bir sürümü. Bu seçenekte listelenen birimler, yapılandırma birimi ise başlatılır. Ancak, listelenen birimler başlayamazsa veya işleme eklenemezse, bunun işlemin bir bütün olarak geçerliliği üzerinde bir etkisi yoktur. Bu, bir ünitenin çalıştırılmasını başka bir ünitenin çalıştırılmasına bağlamak için önerilen yoldur.
Ve Gerektirir =:
Diğer birimlere gereksinim bağımlılıklarını yapılandırır. Bu birim etkinleştirilirse, burada listelenen birimler de etkinleştirilir. Diğer birimlerden biri devre dışı kalırsa veya etkinleştirilemezse, bu birim devre dışı bırakılır. Bu seçenek bir kereden fazla belirtilebilir veya bir seçenekte birden çok boşlukla ayrılmış birim belirtilebilir, bu durumda listelenen tüm adlar için gereksinim bağımlılıkları oluşturulur. Gereksinim bağımlılıklarının hizmetlerin başlatılma veya durdurulma sırasını etkilemediğini unutmayın. Bunun After = veya Before = seçenekleriyle bağımsız olarak yapılandırılması gerekir. Foo.service biriminin bir Require = veya Before = ile herhangi bir sipariş yapılandırılmadığı gibi bir birim bar.service gerektirmesi durumunda, foo.service etkinleştirilirse her iki birim aynı anda ve aralarında gecikme olmadan başlatılır. Sıklıkla,
Bu bağımlılık türünün, bu birim çalışırken diğer birimin her zaman etkin durumda olması gerektiği anlamına gelmediğini unutmayın. Özellikle: başarısız durum denetimleri (ConditionPathExists =, ConditionPathExists =,… - aşağıya bakın), Required = bağımlılığı olan bir birimin başlatma işinin başarısız olmasına neden olmaz. Ayrıca, bazı birim türleri kendi başlarına devre dışı bırakılabilir (örneğin, bir hizmet süreci temiz bir şekilde çıkmaya karar verebilir veya bir cihaz kullanıcı tarafından çıkarılabilir); Bir birimin, etkin durumda başka bir birim olmadan asla etkin durumda olmamasını sağlamak için BindsTo = bağımlılık türünü After = ile birlikte kullanın (aşağıya bakın).
Gönderen freedesktop.org sayfa
Hizmetiniz yalnızca multi-user.target'a ulaşıldığında başlayacaktır (bu hedefe eklemeye çalışırsanız ne olacağını bilmiyorum?) Ve systemd, service -manager.service hizmetinden önce başlatmaya çalışacaktır . Eğer ekran-manager.service herhangi bir nedenle başarısız, servis hala (gerçekten görüntülü yöneticisi, kullanımı gerek eğer öyleyse başlatılacak Requires=
bunun için). Eğer multi-user.target ancak ulaşılamaması, servis başlattı edilmeyecektir.
Hizmetiniz nedir? Bir kiosk sistemi mi? Sezgisel olarak, hizmetinizi multi-user.target'e eklemek istediğinizi varsayalım (bu yüzden başlangıçta başlatılır) ve kesinlikle display-manager.service yoluyla bağlı olmasını sağlayın Requires=display-manager.service
. Ama bu sadece vahşi tahmin.
Sunucu dağıtımımız tüm kullanıcı kimliklerini ve otomatik sayı eşlemelerini içeren LDAP kullanır. Kullanıcı ana dizinleri NFS'ye bağlanır ve kullanıcılar genellikle ana dizinlerindeki yürütülebilir kodla @reboot cronjobs oluşturur. Ayrıca önbellek için sssd kullanıyoruz. Söylemeye gerek yok, bu yapılandırmanın çalışması için belirleyici bir önyükleme sırası sağlayabilmeye büyük güven duyuyoruz. Çok özlü bir systemd yapılandırması geliştirdik ve "istekler" ve "talepler" bölüm seçenekleri arasında belirsiz bir nüans bulduk.
Önyükleme sırasında bir hizmetin başarısız olması ve "restart = always" hizmet seçeneği olarak ayarlanmış bir hizmette "gerektirir" e bağlı başka bir hizmet varsa, bu bağımlı hizmet yeniden başlatılmaz. Ancak, seçenek olarak "istekleriniz" varsa, bağımlı hizmet beklendiği gibi yeniden başlatılır.
man systemd.unit