Systemd birim dosyamı nereye koyacağım?


59

Ben okumak birim dosyaları (değil kullanıcı modunda) için iki klasör vardır.

/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator

Bu anlayışla çelişki şu cevaptır: https://unix.stackexchange.com/a/47715/33386 . Birisi eksik olan bilgileri doldurabilir mi, böylece neler olduğunu anlayabiliyorum? ( GÜNCELLEME: Cevap güncellendi ve anlayışım artık onunla çakışmıyor. )

Ayrıca, komut dosyalarının, klasör içindeki alt klasörlerde düzenlenmiş olduğu anlaşılmaktadır /etc/systemd/system/:

getty.target.wants
multi-user.target.wants

Başka bir yerde başka yerler olduğunu okudum. Bunlar kullanıcıya özel servisler için görünüyor.

/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.

2015-08-31 Güncellemesi:

Diğerleri uğruna, son zamanlarda sorduğum ilgili bir soruya bir link var: Systemd birimleri tarafından yürütülen komut dosyalarını nereye koyacağım?


4
/etc/systemd/systemnerede sen komut dosyalarınızı koymak, Pacman paket komut dosyalarını koyar /usr/lib/systemd/systemve veren systemctl enable foo.servicesembolik bağların oluşturduğu /usriçin /etc...
jasonwryan

1
Bakınız man systemd.target: gruplaşmanın arkasındaki mantığı açıklar.
jasonwryan

Yanıtlar:


57

Sistem birimi dosyalarını koymak için en iyi yer : /etc/systemd/system [Install] bölümüne bir hedef eklediğinizden emin olun, "Nasıl biliyor?" detaylar için. GÜNCELLEME : /usr/local/lib/systemd/systembaşka bir seçenek, detaylar için "Gri Alan" okuyun. "

Kullanıcı birimi dosyalarını koymak için en iyi yer : /etc/systemd/user veya $HOME/.config/systemd/user ancak izinlere ve duruma göre değişir.

Gerçek şu ki sistem birimleri (veya giriş cümlesi onları çağırdığında, "birim konfigürasyonları") herhangi bir yere gidebilir - manuel sembolik bağlantılar yapmaya istekli olduğunuzu ve ikazların farkında olduğunuzu kanıtladı. Üniteyi systemctl daemon-reloadbazı sebeplerle bulabileceği bir yere koymak hayatı kolaylaştırır :

  • Standart bir konum kullanmak, sistem üreticilerinin onları bulacağı ve açılışta etkinleştirilmesini kolaylaştıracağı anlamına gelir systemctl enable. Bunun nedeni, ünitenizin otomatik olarak bir ünite bağımlılığı ağacına (bir ünite önbelleği) eklenmesidir.
  • İzinleri düşünmeniz gerekmez, çünkü yalnızca doğru yetki verilen kullanıcılar belirtilen alanlara yazabilir.

Nasıl biliyor?

Ve systemctl enablesembolik bağlantının nerede oluşturulacağını tam olarak nasıl biliyor? Ünitenin içinde [install]bölümün altında kod yazıyorsunuz. Genellikle bir çizgi var

[Install]
WantedBy = multi-user.target

Bu, dosya sisteminde önceden tanımlanmış bir yere karşılık gelir. Bu şekilde, systemctlbu birimin bir grup birim dosyasına bağlı olduğunu bilir multi-user.target("hedef", birim bağımlılık gruplarını belirlemek için kullanılan bir terimdir. Tüm grupları ile birlikte listeleyebilirsiniz systemctl list-units --type target). Hedefe yüklenecek birim dosyaları grubu bir targetname.target.wantsdizine konur . Bu sadece sembolik bağlantılar dolu bir dizindir (veya gerçek olan). Senin Eğer [Install]bölüm diyor öyle , ama bunun bir sembolik içinde yoksa dizine, o zaman yüklemez. Systemd birim jeneratörleri birim dosyanızı önyükleme sırasında bağımlılık ağacı önbelleğine eklediğinde (jeneratörleri manuel olarak tetikleyebilirsiniz ), bu durumda dizinde sembolik bağlantıyı nereye koyacağınızı otomatik olarak bilir.WantedBymulti-user.targetmulti-user.target.wantssystemctl daemon-reload/etc/systemd/system/multi-user.target.wants/ etkinleştirmelisin.

Kılavuzdaki Anahtar Noktalar:

Ek birimler birim yük yolunda olmayan dizinlerden sisteme ("bağlı") yüklenebilir. Systemctl (1) için link komutuna bakın.

Systemctl altında, Birim Dosya Komutlarını arayın

Birim Dosyası Yükleme Yolu

Birim dosyaları, derleme sırasında belirlenen ve aşağıdaki iki tabloda açıklanan bir dizi yoldan yüklenir. Daha önce listelenen dizinlerde bulunan Birim dosyaları, aynı isimdeki ve listedeki daha düşük dizinlerdeki dosyaları geçersiz kılar.

Değişken $SYSTEMD_UNIT_PATHayarlandığında, bu değişkenin içeriği birim yük yolunu geçersiz kılar. Eğer $SYSTEMD_UNIT_PATH( ":") boş bir bileşen ile biter, her zamanki birim yük yolu değişkenin içeriğine eklenecektir.

Tablo 1 ve Tablo 2'den man systemd.unitiyi.

Sistem modunda çalışırken yolları yükleyin ( --system).

  • /etc/systemd/system Yerel yapılandırma
  • /run/systemd/system Çalışma zamanı birimleri
  • /usr/lib/systemd/system Kurulu paketlerin birimleri

Kullanıcı modunda çalışırken yolu yükle ( --user)

Kullanıcı birimi başına ve tüm / genel kullanıcı birimi başına bir fark var .

Kullanıcı bağımlı

  • $XDG_CONFIG_HOME/systemd/user Kullanıcı yapılandırması (yalnızca $XDG_CONFIG_HOMEayarlandığında kullanılır )
  • $HOME/.config/systemd/user Kullanıcı yapılandırması (yalnızca $XDG_CONFIG_HOMEayarlanmadığında kullanılır)
  • $XDG_RUNTIME_DIR/systemd/user Çalışma zamanı birimleri (yalnızca $XDG_RUNTIME_DIRayarlandığında kullanılır )

  • $XDG_DATA_HOME/systemd/user Ana dizine kurulmuş paketlerin birimleri (yalnızca $XDG_DATA_HOMEayarlandığında kullanılır )

  • $HOME/.local/share/systemd/user Ana dizine kurulmuş paketlerin birimleri (yalnızca $XDG_DATA_HOMEayarlanmadığında kullanılır)

--global (tüm kullanıcılar)

Tüm kullanıcılar için geçerli olan birimler - her kullanıcının sahip olduğu anlam. Böylece her kullanıcı bir yönetici önyüklemede olsa bile bu hizmetleri durdurabilir.

  • /etc/systemd/user Tüm kullanıcılar için yerel yapılandırma ( systemctl --global enable userunit.service)
  • /usr/lib/systemd/user Tüm kullanıcılar için sistem genelinde kurulmuş paketlerin birimleri
  • /run/systemd/user Çalışma zamanı birimleri

Gri alan

Bir yandan, Dosya Hiyerarşi Standardı bunun /etcikili dosyaları çalıştırmayan yerel yapılandırmalar için olduğunu belirtir . Öte yandan, /usr/local/"yerel olarak yazılım yüklerken sistem yöneticisi tarafından kullanılmak içindir" olduğunu belirtir . Ayrıca, (yalnızca kuruluş amacı için değilse) tüm sistem birimi dosyalarının altına girilmesi gerektiğini savunabilirsiniz /usr/local/lib/systemd/system, ancak bu, paket yöneticisinden değil, "yazılımın" bir parçası olan birim dosyalar için tasarlanmıştır. Sistem genelinde karşılık gelen sistemd kullanıcı birimleri altına girebilir /usr/local/lib/systemd/user.


Birim dosyalarının yerleştirilmesi ile ilgili /etc/systemd/systemtavsiye, kendi oluşturduğunuz birim dosyalarının genel önerisi midir? Bir paket yöneticisi tarafından kurulan herhangi bir şey her zaman bunları /usr/lib/systemd/systemörneğin.
slm

@slm Evet, soru sistem ve ünite dosyalarıma atıfta bulunduğunda, kendi kendime yaratılanları ima etmek için tasarlanmıştır.
Jonathan Komar

Fark ederdim: /etc/systemd/usersistem genelinde kullanıcı hizmetleri için (garantili) ve ~/.config/systemd/userözel kullanıcıya özel hizmetler için.
Suuuehgi

16

/etc/systemd/systemEğer koymak nerede sizin komut, pacman koyar paket komut dosyaları /usr/lib/systemd/system.

Yayın systemctl enable foo.servicesembolik bağların oluşturduğu /usriçin /etc. Daha man systemd.unit(5)fazla ayrıntı için Birim Yükleme Yolu bölümüne bakın .


@ macmadness86 eksik, çünkü soru ile ilgisi yok.
jasonwryan

1

Biri birer ntpdbirer statik statik kart, biri p0fde pasif işletim sistemi belirleyicisini çalıştırmak için 3 tane yazdım . Hepsini içine koydum /etc/systemd/system. Görünüşe göre systemdNTP işlerini halledebilirim ama buna o kadar güvenmek istediğimi sanmıyorum.

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.