Direktori rc0.d, rc1.d, ... di / etc

30

Aku sedang menjalankan Ubuntu di mana saya memiliki direktori /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Contoh file dari mesin saya:

directory      example symlinks in the dir
------------------------------------------
/etc/rc1.d:    K76dovecot, K77ntp
/etc/rc2.d:    S23ntp, S24dovecot
/etc/rc3.d:    S23ntp, S24dovecot
/etc/rc4.d:    S23ntp, S24dovecot
/etc/rc5.d:    S23ntp, S24dovecot

Pertanyaan:

  1. Apa tujuan dari beberapa direktori "rc"?
  2. Mengapa Ubuntu menginstal duplikat dari dovecotdan ntpke semua direktori kecuali rc0.ddanrc6.d ?
  3. Jika mereka ditentukan beberapa kali seperti di atas, apakah mereka benar-benar dieksekusi beberapa kali?
  4. Bisakah Anda memberi tahu dari atas dalam urutan apa dovecotdan ntpakan dijalankan pada saat startup?
  5. Apa cara yang tepat untuk memberitahu Ubuntu untuk selalu mengeksekusi ntpsebelum dovecotsaat startup?
roger.james
sumber

Jawaban:

23
  1. Ini adalah runlevels dan merupakan inisiasi gaya-Sistem yang digunakan oleh sebagian besar sistem * NIX (dengan pengecualian systemdsistem berbasis - berbasis). Ketika mem-boot kernel / pengguna memutuskan apa yang runlevelharus dijalankan dan hanya menjalankannya runlevel. Artinya tergantung runlevelAnda dapat boot dengan set program yang berbeda. Ada runlevel untuk berhenti dan reboot juga, tetapi karena Anda berfokus pada bagian startup, mari abaikan saja untuk saat ini.
  2. Karena hanya satu runlevelyang dijalankan saat boot, beberapa program harus / ingin memulai / berhenti di tempat yang berbedarunlevel s dengan parameter yang berbeda atau sama dalam urutan yang sama atau berbeda (tidak semua runlevel sama di semua OS). Tapi Ubuntu menyalin runlevel 3-5 dari 2, itu sebabnya mereka sama.
  3. Tidak. runlevelS dijalankan hanya sekali di startup atau ketika Anda berubah runlevel.
  4. ntpskrip harus dieksekusi terlebih dahulu kemudian dovecotdi runlevel 2-5, bukan untuk runlevel 1. Nomor urut dalam nama skrip ( ) menyatakan urutan eksekusi. Jadi, itu semua tergantung pada runlevel yang Anda gunakan.S23ntp
  5. Itu tergantung pada Distro tetapi dalam kasus khusus Ubuntu Anda dapat menambahkan skrip Anda ke runlevel 1 dan 2.

Info lebih lanjut di artikel Wikipedia tentang runlevel Ubuntu

Braiam
sumber
jadi jika saya meletakkan skrip ke semua dir RC.X, itu akan mengeksekusi beberapa kali atau tidak?
Flash Thunder
@FlashThunder no.
Braiam
40

Seperti yang telah dicatat orang lain, jawabannya adalah semua tentang runlevel yang pada dasarnya adalah mode operasi sistem operasi. Di Linux, ini biasanya:

ID  Name                               Description
0   Halt                               Shuts down the system.
1   Single-user Mode                   Mode for administrative tasks.
2   Multi-user Mode                    Does not configure network interfaces and 
                                       does not export networks services.
3   Multi-user Mode with Networking    Starts the system normally.
4   Not used/User-definable            For special purposes.
5   Start the system normally with 
    with GUI                           As runlevel 3 + display manager.
6   Reboot                             Reboots the system.

Jadi, setiap rcNdirektori berisi tautan simbolis ke skrip yang harus dijalankan pada runlevel itu. Semua skrip aktual biasanya di /etc/init.ddirektori:

$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14  2013 /etc/rc5.d/S22cron -> ../init.d/cron

Penamaan tautan simbolik

Tautan simbolis yang namanya dimulai dengan Sakan dimulai pada runlevel yang dimaksud sementara mereka yang namanya dimulai dengan Kakan dibunuh. Perhatikan bahwa semua tautan di rc6.d, runlevel reboot, mulai dengan K. Itu karena mereka semua harus dihentikan untuk reboot dan tidak ada yang harus dimulai.

Angka-angka setelah huruf awal merujuk pada urutan berjalan dari skrip yang ditautkan. Yang dengan angka lebih kecil akan dijalankan sebelum yang dengan angka lebih tinggi. Jadi, dalam contoh spesifik Anda, S23ntpakan dijalankan (dimulai dalam kasus ini) sebelumnya S24dovecot .

terdon
sumber
Jawaban bagus! Bagaimana jika dua skrip memiliki angka yang sama, misalnya: S01bluetoothdan S01rsync, apakah pesanannya akan berubah-ubah?
direprob
@direprobs ya, pertanyaan bagus. Ya, saya kira salah satu akan dipilih secara acak. Tidak bisa mengatakan bahwa saya tahu.
terdon
@tredon Saya pikir mereka akan dipilih berdasarkan nama file mereka karena mereka mulai dengan S01perbandingan akan b< r, Anda mendapatkan ide. Mungkin!
direprob
1
Jawaban singkat, /etc/init.d/rcmengatakan for s in /etc/rc$runlevel/S*; do …, jadi hanya pergi dalam rangka ekspansi gumpal; yaitu, numerik / alfabet. Jawaban panjangnya adalah bahwa kode di sana jauh lebih rumit daripada yang saya ingat. Saya akan mencoba meluangkan waktu yang serius untuk mempelajarinya dalam waktu enam hingga delapan minggu ke depan. Pada pandangan pertama, sepertinya itu mengekstraksi angka setelah Sdan melakukan sesuatu dengannya, jadi S42beeblebroxdan S42zaphodmungkin lebih erat terkait daripada, katakanlah, S43arthurdan S44dent.
G-Man Mengatakan 'Reinstate Monica'
benar-benar terima kasih atas jawaban yang bagus, Tapi saya punya pertanyaan. Saya meletakkan program saya di startup, tetapi kecepatan aplikasi rendah: stackoverflow.com/questions/49251955/…
H.Ghassami
4

1) Direktori multiple rcX.d menentukan layanan apa yang harus dimulai atau dihentikan selama runlevel 'X'.

2) rc0.d untuk runlevel 0 yang merupakan shutdown. rc6.d untuk reboot. Sisanya semua untuk runlevel yang berbeda (2 - 5). S adalah singkatan dari start dan K for Kill. Ini pada dasarnya adalah tautan ke skrip asli di /etc/rc.d. Angka-angka setelah S / K adalah prioritas dimana layanan akan dimulai / Dibunuh.

3) Ya jika ditentukan beberapa kali, skrip start / kill akan dijalankan beberapa kali. Tetapi tidak ada yang mau melakukan itu.

4) Melihat nomor prioritas, layanan ntp akan dimulai terlebih dahulu diikuti oleh dovecot.

5) Poin ke-4 adalah jalannya.

Albert
sumber