Neden bazı sistem servisleri “maskelenmiş” durumda?


42

Komutu çalıştırdığımda sudo systemctl list-unit-files(sudo'nun isteğe bağlı olduğunu düşünüyorum), tüm hizmetleri ve durumlarını gösteren çıktılar alıyorum.

İşte benim makinemden bir pasaj:

UNIT FILE                                  STATE
...
debian-fixup.service                       static  
debug-shell.service                        disabled
display-manager.service                    enabled 
dns-clean.service                          enabled 
dsmcad.service                             enabled 
emergency.service                          static  
failsafe-x.service                         static  
friendly-recovery.service                  masked  
fuse.service                               masked  
gdm.service                                masked  
getty-static.service                       static  
getty@.service                             enabled 
gpsd.service                               indirect
gpsdctl@.service                           static  
gpu-manager.service                        enabled 
halt-local.service                         static  
halt.service                               masked  
hostname.service                           masked
...

Neden bazı servislerin "maskelenmiş" durumda olduğunu merak ediyorum. Bunun, "bu," elden ya da sistem tarafından başlatılamıyor olması nedeniyle "engellenmekten daha iyidir," anlamına geldiğini düşünüyorum.

Bir servis biriminin durumu hakkında nasıl daha fazla bilgi edinebilirim?

Üniteleri kendi durumuna kim soktu?

Örneğin, denedim sudo systemctl help dsmcad- bu sadece documentation = ...ünite dosyasından satır getirir ./etc/systemd/system/dsmcad.service

Not: Burada tam olarak ne dsmcad servisinin ne olduğunu ve ne işe yaradığını biliyorum, kendim kurdum. Genel bir çözüme daha çok ilgi duyuyorum.

Yanıtlar:


47

maskdaha güçlü bir sürümüdür disable. disableBelirtilen birim dosyasının tüm sembollerini kullanarak kaldırılır. maskBirimleri kullanıyorsanız bağlı olacaktır /dev/null. Bu, örneğin kontrol ederseniz görüntülenir systemctl status halt.service. Bunun avantajı, maskherhangi bir aktivasyonun, hatta manüel bile olsa engellenmesidir.

Dikkat: systemctl list-unit-filesünite dosyalarının durumunu listeliyor (statik, etkin, devre dışı, maskeli, dolaylı) ve hizmetin durumu ile ilgisi yok. Hizmetlerin kullanımına bakmak systemctl list-units.


7
Ayrıca, istenirse maskelenmiş durumun nasıl kaldırılacağını da açıklayın.
erikbwork

19
Kullanılabilecek bir maskve bir unmaskkomut var systemctl. Öyleyse sadece yap systemctl unmask name_of_service.service.
Kellerspeicher

yapıyor systemctl unmask name_of_service.servicetamamen benim servis tanım dosyası kaldırıldı /etc/systemd/system/şimdi ben tekrar eklemesi gerekir. Tekrar maskelenirse, bir döngüde sıkışıp kalacağım o
Eldamir

1
Merhaba Eldamir, içinde /etc/systemd/systemsadece hizmetlerin sembolik bağlarıdır . Sizin eklemek gerekir *.servicedosyayı /lib/systemd/systemo bağlanacak olan yerden /etc/systemd/systemeğer enableservis. Bu bağlantıya maskbir bağlantı oluşturuyor /dev/nullve unmaskbu bağlantıyı kaldırıyor /etc/systemd/systemve birileri bir dosya koyarsa hiçbir önemi yoktur.
Kellerspeicher

3

hostname.serviceAna systemdbilgisayar adını (/ etc / hostname'den) başlatma sırasında çok erken ayarladığı için fazlalık olarak maskelenir .

Bu ayar Debian systemd paketi tarafından sağlanır.

$ ls -l /lib/systemd/system/hostname.service
lrwxrwxrwx 1 root root 9 Apr  8 22:47 /lib/systemd/system/hostname.service -> /dev/null
$ dpkg-query --search /lib/systemd/system/hostname.service
systemd: /lib/systemd/system/hostname.service

Benzer şekilde, Debian şimdi haltsisteme bir kabuk betiği olmadan da çalışabilir , bunun yerine systemd-shutdown (kaynak kod burada ) kullanılır.

Bir servis elle maskelenmişse, maske /etc/systemd/systemyerine takılacaktır .

Hizmetler, Debian / Ubuntu'da kaldırıldıklarında da maskelenir . Neden bilmiyorum.


0

Maskeli durum hakkında bilgi talep ettiğiniz için, bir hizmette, başladıktan sonra tanımları değiştirilmiş, yeniden yükle (systemctl daemon-yeniden yükleme) ve yeni durumun tamam olmadığını belirten bir hizmette gözlemlenebileceğini belirtmek önemlidir . Bunu anlamak için kolay bir örnek aşağıdaki senaryodur:

a) the service is running well (already started)
b) edit the service definition file and delete everything in its contents
c) reload
d) state masked will be observed too

Dolayısıyla, maskelenmiş durum yanlış bir servis tanımından kaynaklanabilir. Bu nedenle, kullanıcı hizmeti hatalı şekilde düzenleyerek maskesiz durumu tetikleyebilir.

Gözlem: Bunun bilerek olup olmadığından emin değilim ya da basit bir hata mı (varsayılan seçenek), ancak paylaşmak için ilginç bilgiler olabilir

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.