“Systemctl mask” ve “systemctl disable” arasındaki fark nedir?


35

Ubuntu GNOME 16.04'ün açılış süresini, açılışta plymouth hizmetlerini devre dışı bırakarak geliştirmek istiyorum. Çeşitli web sitelerinde nasıl yapılacağı hakkında iki cevap buldum:

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

Ne yaptıklarını bilmediğim sürece yukarıdakilerin hiçbirini uygulayamam.


Yanıtlar:


52

Eğer bir servis varsa enabled, o zaman bir yerde bir sembolik bağlantı var.

/etc/systemd/system

Birim dosyasına, genellikle

/lib/systemd/system

Faydalı bir şekilde, enablebir hizmet olduğunda , oluşturulan bağlantının ve hedefin tam yolları stdout'a yazdırılır.

Hizmetin devre dışı bırakılması sembolik bağlantıyı siler, böylece birim dosyası etkilenmez, ancak sistem okuduğunda servis bir sonraki önyüklemede yüklenmez /etc/systemd/system.

Ancak, özürlü hizmet edebilir yüklenecek ve başlatılacaktır buna bağlı bir hizmeti başlatılmışsa ; enableve disableyalnızca üniteler için otomatik başlatma davranışını yapılandırır ve durum kolayca geçersiz kılınır.

Bir maskeli hizmet olan birim dosyası işaret eden bir sembolik olandır /dev/null. Bu, başka bir etkin servis için gerekli olsa bile servisi yüklemek için "imkansız" hale getirir.

Ne zaman maskbir hizmet, bir sembolik oluşturulur /etc/systemd/systemiçin /dev/nullbaşka yerde el değmemiş orijinal birim dosyası bırakarak. Bir unmaskservis yaptığınızda sembolik bağlantı silinir.

Ancak, bu komutların her zaman onurlandırılmadığını fark ettim.

Çoğu hizmeti maskelemeye çalıştığımda, başarısız oluyor:

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

Tabii ki önce servisi durdurdum. @Anwar, maskelemenin sadece kritik olmayan servisler için mümkün olduğunu öne sürüyor.

Maskeli bir servisi maskeden çıkarma, kendim maskelemediğim sürece de (sessizce) başarısız olur. Bunun , şu anda aşağıdakilere bir işaret bağlantısı dışında, hiçbir yerde hizmet için bir birim dosyası olmadığına inanıyorum :/dev/null/lib/systemd/system

$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

Bu sorunu yaşayan sadece ben değilim

Aslında x11 ortak maskeli hizmetin maskesini kaldırmak için, /dev/nullve sembolik bağlantıyı silmek zorunda kaldı sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. Şimdi sorguladığımda systemctl status x11-common, servisin güzel yeşil bir çembere sahip olduğunu ve birim dosyası olmamasına rağmen yüklü ve aktif olduğunu görüyorum (çıkıldı).

Daha fazla başvuru için, Systemctl Nasıl Kullanılır başlıklı makalede biraz kullanım olabilir.


1
Hmm, anladım systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead). Kötümü? Ama ben Debian'dayım, Ubuntu değil. Her neyse, güzel açıklama. Teşekkür ederim.
Faheem Mitha

@FaheemMitha Hizmetin gerekli olduğundan emin değilim - sistemim onsuz çalışıyor gibi görünüyor. Yine de Debian ile hiç deneyim yok, üzgünüm!
Zanna,

17

Bu oldukça basit.

  • systemctl start, systemctl stop: derhal söz konusu birimi başlatır (durdurur) ;
  • systemctl enable, systemctl disable: önyükleme sırasında otomatik başlatma ünitesini işaretler (işaretini kaldırır) ( [Install]bölümünde açıklandığı şekilde birime özgü bir şekilde );
  • systemctl mask, systemctl unmask: söz konusu üniteyi başlatma girişimlerinin tümünde ve tüm girişimlerde bulunmalarına izin verir (izin verir) (varsayılan önyükleme hedefinin bağımlılıkları dahil olmak üzere el ile veya başka bir birime bağımlı olarak). Sistemd'de otomatik başlatma için işaretlemenin, varsayılan önyükleme hedefinden söz konusu birime yapay bir bağımlılık eklenerek uygulandığından, "maske" de otomatik başlatmayı engeller.

Referans: systemctl (1) .

Daha fazla: Lennart Poettering (2011-03-02). "Üç Seviye Kapalı" . Yöneticiler için systemd . 0pointer.de.



6

Kısacası,

  • disableÜniteyi önyükleme sırasında devre dışı bırakır. Ancak bu ünite açılıştan sonra herhangi bir zamanda başlatılabilir.

  • masküniteyi tamamen devre dışı bırakır. Maskeyi kaldırmadan başlatılamaz. Bu otomatik olarak önyükleme sırasında başarısız olacağını ima eder.


Ben merak ediyorum - do maskve unmasksizin için çalışacak mı? (Test etmek istemiyorsanız tamamen anlıyorum!)
Zanna

1
@Zanna evet. Bu işe yarıyor. Daha önce test ettim, şimdi tekrar test ettim. ile postgresql@9.5-main.servicehizmet.
Anwar

Hmm benim için neden işe yaramadığını öğrenmeliyim. Biliyorum, tek kişi ben değilim
Zanna

Kritik olmayan hizmetler için işe yarayabilir. Hala yeni sanırım. BTW, cevabınız daha bilgilendirici oldu. Bu yararlı oldu
Enver
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.