Bir systemd hedefi nasıl oluşturulur?


17

Bol miktarda gönderi, Youtube videosu ve systemd konusunda "belgeler" ile bolca arama yaptıktan sonra, hala bir kayıptayım.

Bağlantı ( https://wiki.archlinux.org/index.php/systemd#Create_custom_target ) umut vericiydi, ama (bana göre) biraz belirsizdi.

Soru

Özel bir systemd hedefi (IE: foo.target) oluşturulabilir, böylece bir .service birimleri ile önyükleme yapılabilir?

Misal

  1. Sistem önyükleme default.target ("foo.target" sembolik bağlantısı)
  2. "foo.target" sadece bir barebones X sunucusu ve GUI programı başlatır, "gvim" deyin.

neden

Sadece bir X programını hızlı bir şekilde başlatmak için özel bir hedef oluşturmak istiyorum. İhtiyacım olmayan tüm hizmetleri hariç tutmak güzel olurdu.

Şimdiden teşekkürler!

Yanıtlar:


17

Okumak man 5 systemd.unitve man 5 systemd.targetbize birim dosyaların hedefleri ve diğer her şeyi tanımlamak için kullanıldığını söyler. Özel olarak bir hedefin nasıl oluşturulacağına dair herhangi bir belge yoktur , bu nedenle nasıl yapılması gerektiğini belirlemek zordur, ancak bir hizmet oluşturmaktan çok farklı değildir.

Eğer hedef oluştururken, yapmanız gerekir sembolik için target.wantssystemd hizmetler dizinden dizine. Ardından hedefinizi ayarlayabilir / önyükleyebilirsiniz. Örneğinizin nasıl göründüğü aşağıda açıklanmıştır.

/etc/systemd/system/foo.target

Bu, hedefin birim dosyasıdır. Graphical.target örnek olarak alınırsa, bunu temel olarak kullanarak kendi hedefimizi oluşturabiliriz.

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

Sistem yönetiminden alınan seçenekleri açıklamak;

  • Description- Hedefi tanımlar. Anlamalısın
  • Requires- Hedefin sert bağımlılıkları. Kendi hizmet (ler) inize başlamadan önce temel sistemin başlamasına izin vermelisiniz
  • Wants- Yumuşak bağımlılıklar. Hedef bunların başlamasını gerektirmez .
  • Conflicts - Bir birimin başka bir birimde Çakışma ayarı varsa, birincinin başlatılması ikinciyi durdurur veya tersi de geçerlidir.
  • After - Bu hizmetlerden sonra çizme
  • AllowIsolate- Gerçekten size ve çevrenize bağlı. Detaylar sayfada bulunabilirsystemd.unit(5)

/etc/systemd/system/foo.target.wants/

Bu, hedefiniz için oluşturduğunuz / ihtiyaç duyduğunuz hizmetleri bağlayacağınız dizindir. Wants=Birim dosyasındaki seçeneğe denktir . Bu dizini oluşturun ve daha sonra bunun gibi semboller oluşturun; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service. Bu, sistem dizinindeki bar.service öğesinden foo.target.wants dizininize bir symlink oluşturur.


Hizmet için bir birim dosyası oluşturmanın bu cevabın kapsamı dışında olduğunu düşünüyorum ve bu soru kesinlikle daha fazla belgelenmiştir, bu yüzden şimdilik dışarıda bırakacağım. Birim dosyanızı oluşturduğunuzda, onu target.wants dizinine ekleyin veya Wants=yönergeye ekleyin .


Yeni bir hedef oluşturmak için yukarıdakileri takip ettim ve hizmetime birkaç hedef ekledim. Ancak, bu hizmetlerin hiçbiri systemd tarafından başlatılmaz. Yeni eklenen hedef çalışmasındaki hizmetleri gösteren eksiksiz bir örnek var mı?
linuxfan

1
Önyüklemede çalışacak özel bir hizmet ayarlamak için basit adımlar arıyorsanız, büyücünün yığın postasına bakın .
17:17:17

ben eklemek @linuxfan foo.targetiçin Requiresalan ve Beforealanında multi-user.targetgibi ve Requires: base.target foo.target. Bundan sonra Arch Linux vm'yi yeniden başlatıyorum ve foobar.serviceotomatik olarak daemon olarak çalışacağım.
L_K

2
Güzel cevap, ama aslında beklediğiniz gibi çalışmıyor. 1. İstediği için hizmetin bu hedefle başlayacağı anlamına gelmez. 2. multi-user.target çalışmasını sağlayan bir tür gizli şeyler var gibi görünüyor.
Otheus
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.