Hanya satu sistem init yang dapat aktif sekaligus. Pada 16,04, itu systemd.
Sejumlah paket dikirimkan dengan file untuk beberapa sistem init, sehingga dapat dikelola dengan beberapa sistem init pada OS yang berbeda. Di Ubuntu, kadang-kadang skrip untuk beberapa sistem init diinstal, meskipun mereka tidak semua digunakan pada saat yang sama.
Sistem init yang lebih baru mencoba mempertahankan kompatibilitas dengan yang lama. Secara khusus, systemd mencoba untuk mempertahankan kompatibilitas dengan skrip init Upstart dan SysV.
Dalam kasus skrip "init.d" yang Anda sebutkan, itu adalah skrip init "SysV", bukan skrip pemula. Juga, skrip init "SysV" hanya akan dimulai saat boot jika disinkronkan ke direktori seperti "/etc/rc5.d". Anda akan menemukan bahwa Network Manager tidak memiliki symlink yang terpasang di sana.
Untuk memahami bagaimana systemd
mengelola skrip init "SysV" lama, lihat Bagaimana systemd menggunakan /etc/init.d scirpts? .
Sekarang, untuk menjawab pertanyaan tentang mengapa ia berfungsi untuk me-restart Network Manager dengan "service network-manager restart". The service
Perintah ini digunakan dengan baik script Upstart dan skrip init SysV, lebih memilih mantan. Network Manager juga memiliki skrip pemula yang diinstal pada 16,04 di /etc/init/network-manager.conf
.
Jika Anda meninjau output dari sudo strace service network-manager restart
, Anda bisa mengetahui apa yang terjadi. Pertama, output menunjukkan bahwa systemctl
sedang dipanggil, menunjukkan bahwa perintah sedang diarahkan ke systemd. Pertama, segera setelah dibuka /usr/bin/service
, Anda dapat melihatnya mulai membaca di file sebagai skrip shell:
open("/usr/sbin/service", O_RDONLY) = 3
...
read(10, "#!/bin/sh\n\n#####################"..., 8192) = 8192
Sekarang kita tahu itu service
adalah skrip shell, kita bisa memeriksa kode sumbernya. Dalam kode sumber, kami menemukan bahwa is_systemd
terdeteksi dan diatur. Untuk kasus systemd, Anda dapat melihat bahwa perintah ditulis ulang menjadi systemctl restart network-manager
.
Jadi, sementara tiga sistem init hidup berdampingan dan memiliki beberapa kompatibilitas, ada beberapa lapisan kerumitan. Untuk meminimalkan kerumitan apa yang terjadi di masa depan, yang terbaik adalah menggunakan file unit systemd dan systemctl
alat untuk mengelola layanan.