Rc0.d, rc1.d,… / etc dizinleri


30

Ben dizinleri var nerede Ubuntu koşuyorum /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Makinemden örnek dosyalar:

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

Sorular:

  1. Birden fazla "rc" dizininin amacı nedir?
  2. Neden Ubuntu tekrarı taktınız dovecotve ntpdışında dizinlere tüm içine rc0.dve rc6.d?
  3. Yukarıdaki gibi birden çok kez belirtilirlerse, aslında birden çok kez mi yürütülürler?
  4. Yukarıdakilerden hangi sırayla başlayacağınızı dovecotve hangi ntpaşamada yürütüleceğini söyleyebilir misiniz ?
  5. Ubuntu her zaman çalıştırmak için söylemek doğru yolu nedir ntpönce dovecotbaşlangıçta?

Yanıtlar:


23
  1. Bunlar runlevels * dir ve çoğu * NIX sistemi tarafından kullanılan (temel sistemler hariç systemd) Çekirdek / kullanıcı önyüklenirken neyin runlevelçalıştırılacağına karar verir ve yalnızca bunu yürütür runlevel. Yani runlevelsize bağlı olarak farklı programlar ile başlatabilirsiniz. Durma ve yeniden başlatma için çalışma seviyeleri de var, ancak başlangıç ​​kısmına odaklandığınız için şimdilik onları görmezden gelelim.
  2. Sadece bir tanesi runlevelönyükleme sırasında yürütüldüğünden, bazı programlar runlevelaynı veya farklı sırada farklı veya aynı parametrelerle farklı s'lerde başlatmak / durdurmak ister (tüm işletim seviyeleri tüm işletim sistemlerinde aynı değildir). Ancak Ubuntu, 2'den 3-5'lik çalışma seviyelerini kopyalar, bu yüzden aynıdır.
  3. No.'lar runlevelbaşlangıçta yalnızca bir kez veya siz değiştirdiğinizde yürütülür runlevel.
  4. ntpbetikler önce dovecotrunlevel 1'de olduğu gibi runlevel 2-5'te çalıştırılmalıdır . Betik adlarındaki ( ) sıra numarası yürütme sırasını belirtir. Yani, tüm kullandığınız çalışma seviyesine bağlıdır.S23ntp
  5. Distro'ya bağlıdır, ancak belirli bir Ubuntu durumunda, betiğinizi runlevel 1 ve 2'ye ekleyebilirsiniz.

Ubuntu runlevels hakkında Wikipedia makalesinde daha fazla bilgi bulabilirsiniz.


Bu yüzden eğer tüm RC.X dizinlerine komut dosyası koyarsam, birkaç kez çalıştırılacak mı, değil mi?
Flash Thunder,

@FlashThunder no.
Braiam

40

Diğerlerinin de belirttiği gibi, cevap tamamen bir işletim sisteminin çalışma şekli olan çalışma seviyeleri ile ilgilidir. Linux'ta bunlar genellikle:

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.

Bu nedenle, her bir rcNdizin o çalışma seviyesinde çalıştırılması gereken komut dosyalarına sembolik bağlantılar içerir. Tüm komut dosyaları normal olarak /etc/init.ddizinde bulunur:

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

Sembolik bağlantı adlandırma

Adı ile başlayan bir sembolik bağlantı, Ssöz konusu çalışma düzeyinde başlayacak ve adı ile başlayanlar Köldürülecek. Tüm bağlantıların rc6.d, yeniden başlatma çalışma seviyesinin başladığına dikkat edin K. Çünkü hepsi bir yeniden başlatma için durdurulmalı ve hiçbir şey başlatılmamalıdır.

İlk harften sonraki sayılar, bağlantılı komut dosyalarının çalıştırma sırasını belirtir. Daha küçük rakamlara sahip olanlar, daha yüksek rakamlara sahip olanlardan önce çalıştırılacaktır. Yani, özel örnekte, S23ntp(bu durumda başladı) çalışacaktır önce S24dovecot .


Mükemmel cevap! Örneğin, iki komut dosyası aynı sayılara sahipse, örneğin: S01bluetoothve S01rsyncsıra rastgele olacak mı?
direprobs 15:17

@ direprobs ha, iyi bir soru. Evet, ikisinin de rastgele seçileceğini tahmin ediyorum. Yine de bildiğimi söyleyemem.
terdon

@tredon Dosya isimlerine göre seçileceğini düşünüyorum çünkü S01karşılaştırma ile başlayacakları için b< r, fikir olsun. Olabilir!
direprobs

1
Kısa cevap, /etc/init.d/rcdiyor ki for s in /etc/rc$runlevel/S*; do …, bu sadece glob genişleme sırasına giriyor; yani, sayısal / alfabetik. Uzun cevap, kodun hatırladığımdan çok daha karmaşık olduğu. Önümüzdeki altı ila sekiz hafta içinde bir süre çalışmak için biraz zaman geçirmeye çalışacağım. O sonra numarayı ayıklanması oluyor gibi ilk bakışta, göründüğü Sve onunla bir şey yaptığını, bu yüzden S42beeblebroxve S42zaphoddaha sıkı demek, daha fazla ilişkili olabilir, S43arthurve S44dent.
G-Man,

Harika cevap için gerçekten teşekkürler, ama bir sorum var. Programımı başlangıçta kullandım, ancak uygulama hızı düşük: stackoverflow.com/questions/49251955/…
H.Ghassami

4

1) Çoklu rcX.d dizinleri, 'X' çalışma seviyesi sırasında hangi servislerin başlatılacağını veya durdurulacağını belirtir.

2) rc0.d, kapanmış olan çalışma seviyesi 0 içindir. rc6.d yeniden başlatmak içindir. Gerisi hepsi farklı çalışma seviyeleri içindir (2 - 5). S başlangıç ​​ve K için K anlamına gelir. Bunlar esas olarak /etc/rc.d dosyasındaki orjinal komut dosyalarına bağlantılar. S / K sonrası sayılar, servislerin başlatılacağı / öldürüldüğü önceliktir.

3) Evet, birden çok kez belirtilirse, start / kill komut dosyası birden çok kez çalıştırılır. Ama kimse bunu yapmak istemiyor.

4) Öncelikli numaralara bakıldığında, ilk önce ntp servisi, ardından güvercin başlayacaktır.

5) Dördüncü nokta budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.