Mengapa beberapa layanan systemd dalam keadaan "tertutup"?

43

Ketika saya menjalankan perintah sudo systemctl list-unit-files(saya pikir sudo adalah opsional), saya mendapatkan output yang menunjukkan semua layanan dan keadaan mereka.

Ini cuplikan dari mesin saya:

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  
[email protected]                             enabled 
gpsd.service                               indirect
[email protected]                           static  
gpu-manager.service                        enabled 
halt-local.service                         static  
halt.service                               masked  
hostname.service                           masked
...

Saya bertanya-tanya mengapa beberapa layanan berada dalam keadaan "tertutup". Saya pikir ini berarti, "ini lebih baik daripada 'menonaktifkan', karena layanan tidak dapat dimulai, baik dengan tangan atau dengan sistemd".

Bagaimana saya bisa mendapatkan informasi lebih lanjut tentang keadaan unit layanan?

Siapa yang telah menempatkan unit ke masing-masing negara?

Saya mencoba, misalnya, sudo systemctl help dsmcad- yang hanya memunculkan documentation = ...baris dari file unit./etc/systemd/system/dsmcad.service

Catatan: Di sini saya tahu persis apa layanan dsmcad dan apa fungsinya, saya telah menginstalnya sendiri. Saya lebih tertarik pada solusi umum.

knb
sumber

Jawaban:

48

maskadalah versi yang lebih kuat disable. Menggunakan disablesemua symlink dari file unit yang ditentukan dihapus. Jika menggunakan maskunit akan ditautkan /dev/null. Ini akan ditampilkan jika Anda memeriksa misalnya dengan systemctl status halt.service. Keuntungannya maskadalah untuk mencegah segala jenis aktivasi, bahkan manual.

Perhatian: systemctl list-unit-filesadalah daftar status file unit (statis, diaktifkan, dinonaktifkan, bertopeng, tidak langsung) dan tidak ada hubungannya dengan keadaan layanan. Untuk melihat penggunaan layanansystemctl list-units .

Kellerspeicher
sumber
8
Tolong jelaskan juga cara menghapus status bertopeng, jika diinginkan.
erikbwork
19
Ada maskdan unmaskperintah yang dapat digunakan dengan systemctl. Jadi lakukan saja systemctl unmask name_of_service.service.
Kellerspeicher
melakukan systemctl unmask name_of_service.servicesepenuhnya menghapus file definisi layanan saya /etc/systemd/system/, jadi sekarang saya perlu menambahkannya kembali. Jika itu menjadi topeng lagi, saya akan terjebak dalam lingkaran oO
Eldamir
1
Hai Eldamir, /etc/systemd/systemhanya tautan simbolis layanan. Anda harus menambahkan *.servicefile /lib/systemd/systemdari mana ia akan ditautkan /etc/systemd/systemjika Anda enablelayanan. maskmembuat tautan ke /dev/nulldan unmaskmenghapus tautan ini dari /etc/systemd/systemdan jelas tidak ada bedanya jika seseorang meletakkan file di sana.
Kellerspeicher
3

hostname.servicedisembunyikan sebagai berlebihan karena systemdmenyetel nama host (dari / etc / hostname) sejak awal saat startup.

Pengaturan ini disediakan oleh paket systemd Debian.

$ 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

Demikian pula, Debian sekarang dapat berjalan tanpa skrip shell ke haltsistem, itu ditangani oleh systemd-shutdown (kode sumber di sini ) sebagai gantinya.

Jika suatu layanan telah di-masking secara manual, maka mask akan diinstal /etc/systemd/systemsebagai gantinya.

Layanan juga tertutup saat dihapus di Debian / Ubuntu . Saya tidak tahu kenapa.

sourcejedi
sumber
Masking vs. menghapus layanan datang dengan perbedaan menghapus vs membersihkan paket. Dalam kasus pertama file-file konfigurasi disimpan dan karenanya berpotensi berbahaya untuk mengaktifkan layanan secara tidak sengaja (karena file layanan mungkin masih ada dalam file-file konfigurasi). Paket yang dibersihkan juga akan menghapus file layanan dan tidak bertopeng.
Fiximan
0

Karena Anda meminta informasi tentang keadaan bertopeng, penting untuk menyebutkan bahwa itu dapat diamati dalam layanan yang setelah dimulai, seandainya definisi dimodifikasi, memuat ulang (systemctl daemon-reload) dan keadaan baru TIDAK ok . Salah satu contoh mudah untuk memahaminya adalah skenario berikut:

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

Oleh karena itu, negara bertopeng dapat berasal dari definisi layanan yang tidak tepat. Oleh karena itu, pengguna dapat menyebabkan status kedok dengan mengedit layanan dengan tidak benar.

Pengamatan: Saya tidak yakin apakah itu terjadi dengan sengaja atau itu adalah bug sederhana (opsi default), tetapi mungkin ada beberapa info menarik untuk dibagikan

Thiago Conrado
sumber