Apa perbedaan antara / etc / init / dan /etc/init.d/?

230

Apa perbedaan antara /etc/init/dan /etc/init.d/?

Secara umum, apa makna .dsufiks yang disampaikan ke direktori?

Olivier Lalonde
sumber

Jawaban:

229

/etc/init.dberisi skrip yang digunakan oleh alat init System V (SysVinit). Ini adalah paket manajemen layanan tradisional untuk Linux, yang berisi initprogram (proses pertama yang dijalankan ketika kernel telah selesai menginisialisasi¹) serta beberapa infrastruktur untuk memulai dan menghentikan layanan dan mengkonfigurasinya. Secara khusus, file dalam /etc/init.dadalah shell script yang menanggapi start, stop, restart, dan (bila didukung) reloadperintah untuk mengelola layanan tertentu. Skrip ini dapat dipanggil secara langsung atau (paling umum) melalui beberapa pemicu lain (biasanya keberadaan tautan simbolis di /etc/rc?.d/).

/etc/initberisi file konfigurasi yang digunakan oleh Pemula. Upstart adalah paket manajemen layanan muda yang diperjuangkan oleh Ubuntu. File dalam /etc/initadalah file konfigurasi mengatakan Upstart bagaimana dan kapan start, stop, reloadkonfigurasi, atau query statuslayanan. Pada awal yang jelas, Ubuntu sedang transisi dari SysVinit ke Upstart, yang menjelaskan mengapa banyak layanan datang dengan skrip SysVinit meskipun file konfigurasi Upstart lebih disukai. Bahkan, skrip SysVinit diproses oleh lapisan kompatibilitas di Pemula.

.ddi nama direktori biasanya menunjukkan sebuah direktori yang berisi banyak file konfigurasi atau skrip untuk situasi tertentu (misalnya /etc/apt/sources.list.dberisi file yang digabungkan untuk membuat virtual sources.list; /etc/network/if-up.dberisi skrip yang dijalankan ketika jaringan saya nter f ace diaktifkan). Struktur ini biasanya digunakan ketika setiap entri dalam direktori disediakan oleh sumber yang berbeda, sehingga setiap paket dapat menyimpan plug-in sendiri tanpa harus mengurai file konfigurasi tunggal untuk referensi itu sendiri. Dalam hal ini, kebetulan bahwa "init" adalah nama logis untuk direktori, SysVinit datang lebih dulu dan digunakan init.d, dan Pemula menggunakan polosinituntuk direktori dengan tujuan yang sama (itu akan lebih "mainstream", dan mungkin kurang sombong, jika mereka menggunakannya /etc/upstart.dsebagai gantinya).

¹ tidak termasuk initrd

Gilles
sumber
28
catatan sejarah esoteris: .ddirektori dimasukkan dengan Sistem V. Itu adalah notasi yang membingungkan saat itu dan akhirnya mungkin ide satu orang yang masuk ke basis kode dan tidak bisa pergi. Misalnya, jika Anda berpikir itu catadalah nama yang buruk untuk tugas yang dilakukannya, bayangkan berapa banyak file di seluruh sistem yang harus Anda sentuh untuk mengubahnya.
msw
Pada sistem, yang memiliki kedua direktori, yang mana dari Upstart dan SysVinit digunakan? Apakah ada cara untuk memeriksa?
asheeshr
3
@ AsheeshR Periksa apakah ada paket yang dipanggil upstartatau sysvinit. Dan dalam versi terbaru, bisa systemdjuga (yang tidak ada untuk Ubuntu kembali ketika saya menulis jawaban saya). Paket mana yang disediakan /sbin/init( dpkg -S /sbin/init).
Gilles
Pada contoh AWS Ubuntu yang saya gunakan (dari Bitnami), itu adalah upstartpaket yang menyediakan / sbin / init (ran dpkg -S /sbin/init). Tetapi Bitnami telah menempatkan skripnya di direktori /etc/init.d. Bukankah ini bertentangan dengan jawaban Anda di @AsheeshR di atas? Terima kasih.
Sabuncu
@ Sabuncu Ini adalah contoh "skrip SysVinit diproses oleh lapisan kompatibilitas di Pemula".
Gilles
29

The ".d" biasanya ditambahkan ke nama direktori untuk menunjukkan bahwa apa yang dulu (atau apa yang bisa) ditangani oleh satu skrip atau file konfigurasi tunggal telah dipecah menjadi beberapa file demi kenyamanan, tetapi yang harus dimasukkan, atau dieksekusi, bersama.

Misalnya, /etc/apache/conf.d/atau/etc/apt/sources.d/

Dalam kasus di mana urutan mana yang harus dimasukkan / dieksekusi, file dalam direktori ini kadang-kadang mulai dengan angka, seperti "00-default" atau "80-user" sehingga mereka mengeksekusi dalam urutan yang benar.

Dalam kasus /etc/init.d/semacam itu menunjukkan bahwa skrip di "init.d" semua harus dieksekusi. Namun, saat ini, sistem init dari sistem operasi modern sedikit lebih terlibat daripada itu, tetapi nama direktori masih ada.

thomasrutter
sumber
Mungkin .dcara itu terkait dengan proses 'deamon' yang biasanya dimulai saat boot.
21
.d jelas untuk direktori, bukan daemon.
Martin
13

Seperti yang Anda tunjukkan, nomenklatur ".d" membingungkan dan aneh, dan tidak benar-benar memiliki tempat dalam sistem modern mana pun - Anda akan melihat bahwa sebagian besar layanan modern cenderung menjatuhkannya.

Alasan direktori adalah /etc/initdan bukan /etc/upstartkarena Upstart adalah nama proyek, biner yang diinstal sebenarnya masih /sbin/inittidak masuk akal jika konfigurasinya memiliki nama yang tidak cocok dengan biner.

Scott
sumber
7
Ini salah, lihat misalnya udev rules.d, Xorg yang relatif baru xorg.conf.d, tidak terlalu tua /etc/profile.ddll.
Ruslan