Sejarah (semacam) manajemen layanan di Unix

Sejarah (semacam) manajemen layanan di Unix

20 Februari 2022

Sudah umum untuk sistem init Unix yang canggih juga menjadi beberapa tingkat sistem manajemen layanan; contoh yang paling jelas adalah systemd Linux. Namun, banyak orang telah mengamati bahwa tidak harus seperti ini dan telah membuat sistem terpisah untuk ini, seperti daemontools DJ Bernstein. Karena manajemen layanan (atau kekurangannya) telah menjadi salah satu area penting dari sistem init Unix, Anda mungkin bertanya-tanya mengapa mereka memiliki tanggung jawab ini. Sebagian besar alasannya adalah sejarah, meskipun ada juga alasan pragmatis.

(Saya juga berpikir bahwa itulah yang diinginkan orang. Sebagian besar administrator sistem tidak ingin memilikinya. untuk menangani sistem init dan kemudian sistem pengawasan layanan yang terpisah; mereka ingin menangani satu hal.)

Secara khusus, untuk waktu yang lama Unix tidak memiliki semacam manajemen layanan seperti itu, di luar init memulai kembali proses getty. Semua layanan hanya dimulai sebagai bagian dari proses boot yang dimulai sebagai skrip yang sangat sederhana dan hanya tumbuh sedikit dari sana di BSD Unix. Jika Anda perlu memeriksa status layanan, Anda menjalankan ps; jika Anda perlu memulai ulang layanan, Anda menghentikannya dengan kill dan memulai versi baru dengan tangan. Sistem init System V sedikit memajukan ini dengan membuat skrip yang merangkum pengetahuan tentang cara memulai, menghentikan, dan terkadang memeriksa status setiap layanan, tetapi tidak melakukan apa pun untuk mengelola layanan seperti itu; itu masih hanya mem-boot (dan mematikan) sistem. Memperhatikan bahwa daemon layanan telah mati dan memulainya kembali terserah Anda.

(Dalam Sistem V init Anda secara teoritis dapat menggunakan /etc/inittab untuk memulai ulang daemon, tetapi lingkungan sistem init secara keseluruhan tidak mendukung melakukannya dengan cara ini.)

Secara historis, memulai layanan dianggap terkait dengan proses booting Unix. Mulai dari saat Sun memperkenalkan workstation berbasis NFS "diskless" dan orang lain menyalinnya, beberapa daemon perlu dijalankan dan dijalankan sebelum /usr dapat dipasang. Anda tidak dapat menunda memulai semua layanan sampai sistem 'naik', tetapi pada saat yang sama Anda tidak bisa begitu saja memulai semua layanan dalam satu kelompok dan menyelesaikannya, karena banyak dari layanan tersebut memerlukan pemasangan sistem file dan sejenisnya. Keterjeratan dalam memulai daemon dan mem-boot sistem ini membuat segala sesuatu yang ada di skrip booting menjadi hal yang wajar sejak pertengahan 1980-an dan seterusnya. Vendor Unix yang berani bisa saja memperkenalkan sistem layanan terpisah (Sun akhirnya melakukannya di SMF), tetapi itu masih akan terjalin erat dalam proses boot dan dengan demikian sistem init jika akan menangani semua daemon dan layanan di system.

(Sistem pihak ketiga seperti daemontools djb umumnya memiliki pekerjaan yang lebih sederhana karena mereka tidak dibayangkan menangani semua daemon dan layanan; mereka hanya akan menangani beberapa di antaranya, seperti program djb lainnya seperti qmail dan tinydns.)

Pada praktiknya, vendor Unix pada 1990-an tidak berani. Sebaliknya, mereka sibuk berkelahi satu sama lain (lihat OSF/1 versus Sistem V rilis 4) dan dilindas oleh pawai murah. Unix gratis tidak lebih baik; BSD gratis sibuk setia pada kemurnian UCB BSD 4.x, dan Linux bekerja keras membangun Unix dari awal (dan mungkin tidak cenderung untuk meninggalkan berbagai versi 'Unix' pada saat itu sebagai hasil dari kontroversi 'Linux bukan Unix' saat itu).

(Ini adalah ringkasan situasi yang agak kasar, karena BSD gratis memang membuat perubahan besar dalam setup init mereka dalam praktek. Tapi untuk alasan apapun, tidak satupun dari mereka berubah secara drastis menjadi setup manajer layanan terpisah, meskipun daemontools dan implementasi lainnya menunjukkan bahwa ide itu pasti ada di komunitas Unix open source. Mungkin satu masalah adalah Solaris SMF tidak 'bukan sistem yang baik.)

PS: Saya menulis versi yang agak berbeda dari sejarah ini beberapa tahun yang lalu di Bagaimana init berakhir sebagai daemon manager Unix. Membaca ulang itu, saya melihat bahwa dalam menulis entri ini saya lupa bagaimana penambahan jaringan di BSD Unix mempersulit boot sistem dan startup daemon, karena sekarang Anda memerlukan jaringan yang dikonfigurasi sebelum beberapa daemon dimulai.

Baca selengkapnya