ไดเร็กทอรี rc0.d, rc1.d, …ใน / etc


30

ผมใช้อูบุนตูที่ฉันมีไดเรกทอรี/etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ... /etc/rc6.d,

ตัวอย่างไฟล์จากเครื่องของฉัน:

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

คำถาม:

  1. จุดประสงค์ของไดเรกทอรี "rc" หลายรายการคืออะไร?
  2. อูบุนตูไม่ติดตั้งซ้ำกันทำไมdovecotและntpในทุกไดเรกทอรียกเว้นrc0.dและrc6.d?
  3. หากระบุไว้หลายครั้งเหมือนด้านบนพวกเขาจะดำเนินการหลายครั้งจริง ๆ หรือไม่
  4. คุณสามารถบอกได้จากข้างต้นในลำดับใดdovecotและntpจะดำเนินการเมื่อเริ่มต้น?
  5. เป็นวิธีที่เหมาะสมในการบอกให้ Ubuntu ดำเนินการntpมาก่อนเสมอdovecotเมื่อเริ่มต้นอย่างไร

คำตอบ:


23
  1. สิ่งเหล่านี้เป็นrunlevels และเป็นการเริ่มต้นรูปแบบ V ของระบบที่ใช้โดยระบบ * NIX ส่วนใหญ่ (พร้อมด้วยข้อยกเว้นที่น่าทึ่งของsystemdระบบ -based) เมื่อบูตเคอร์เนล / ผู้ใช้ตัดสินใจในสิ่งที่runlevelมันควรจะทำงานและดำเนินการ runlevelแต่เพียงว่า หมายความว่าขึ้นอยู่กับว่าrunlevelคุณสามารถบู๊ตด้วยชุดโปรแกรมอื่น มี runlevels สำหรับการหยุดและรีบูทด้วยเช่นกัน แต่เนื่องจากคุณกำลังมุ่งเน้นไปที่ส่วนเริ่มต้นเราจะไม่สนใจมันในตอนนี้
  2. เนื่องจากrunlevelมีการดำเนินการเพียงครั้งเดียวในการบูตบางโปรแกรมควร / ต้องการเริ่ม / หยุดที่runlevels ที่แตกต่างกันด้วยพารามิเตอร์ที่แตกต่างกันหรือเหมือนกันในลำดับเดียวกันหรือแตกต่างกัน แต่ Ubuntu คัดลอก runlevels 3-5 จาก 2 นั่นคือเหตุผลที่พวกเขาเหมือนกัน
  3. หมายเลขrunlevels runlevelจะดำเนินการเพียงครั้งเดียวในการเริ่มต้นหรือเมื่อคุณเปลี่ยน
  4. ntpสคริปต์ควรดำเนินการก่อนจากนั้นdovecotใน runlevel 2-5 ไม่ใช่กรณีสำหรับ runlevel 1 หมายเลขลำดับในชื่อสคริปต์ ( ) ระบุลำดับของการดำเนินการ ดังนั้นมันทั้งหมดขึ้นอยู่กับ runlevel ที่คุณใช้S23ntp
  5. มันขึ้นอยู่กับ Distro แต่ในบางกรณีของ Ubuntu คุณสามารถเพิ่มสคริปต์ของคุณเพื่อ runlevel 1 และ 2

ข้อมูลเพิ่มเติมในบทความWikipediaเกี่ยวกับ Ubuntu runlevels


ดังนั้นถ้าฉันใส่สคริปต์ให้กับ RC.X ทุกคนมันจะทำงานสองสามครั้งหรือไม่?
Flash Thunder

@FlashThunder หมายเลข
Braiam

40

ดังที่คนอื่น ๆ ได้ระบุไว้คำตอบคือทั้งหมดที่เกี่ยวกับrunlevelsซึ่งเป็นโหมดการทำงานของระบบปฏิบัติการ บน Linux เหล่านี้มักจะ:

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.

ดังนั้นแต่ละrcNไดเร็กทอรีมีลิงก์สัญลักษณ์ไปยังสคริปต์ที่ควรรันที่ runlevel นั้น สคริปต์จริงทั้งหมดโดยปกติจะอยู่ใน/etc/init.dไดเรกทอรี:

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

การตั้งชื่อลิงก์สัญลักษณ์

ลิงก์สัญลักษณ์ที่ชื่อขึ้นต้นด้วยSจะเริ่มที่ runlevel ที่เป็นปัญหาในขณะที่ชื่อที่ขึ้นต้นด้วยKจะถูกฆ่า แจ้งให้ทราบว่าการเชื่อมโยงทั้งหมดในrc6.d, runlevel Kรีบูตเริ่มต้นด้วย นั่นเป็นเพราะพวกเขาควรจะหยุดเพื่อรีบูตและไม่ควรเริ่มอะไรเลย

ตัวเลขหลังตัวอักษรเริ่มต้นอ้างอิงถึงลำดับการรันของสคริปต์ที่เชื่อมโยง ผู้ที่มีตัวเลขน้อยจะถูกเรียกใช้ก่อนผู้ที่มีตัวเลขสูงกว่า ดังนั้นในตัวอย่างที่เฉพาะเจาะจงของคุณS23ntpจะถูกเรียกใช้ (เริ่มต้นในกรณีนี้) ก่อน S24dovecot


คำตอบที่ดี! จะเกิดอะไรขึ้นถ้าสคริปต์ทั้งสองมีหมายเลขเหมือนกันตัวอย่าง: S01bluetoothและS01rsyncลำดับจะเป็นแบบสุ่ม?
direprobs

@direprobs huh เป็นคำถามที่ดี ใช่ฉันเดาว่าจะเลือกแบบสุ่ม ไม่สามารถพูดได้ว่าฉันรู้
terdon

@Tredon ฉันคิดว่าพวกเขาจะได้รับการคัดเลือกตามชื่อไฟล์ของพวกเขาเนื่องจากพวกเขาเริ่มต้นด้วยS01การเปรียบเทียบจะเป็นb< rคุณจะได้รับความคิด อาจจะ!
direprobs

1
คำตอบสั้น ๆ ก็คือ/etc/init.d/rcพูดfor s in /etc/rc$runlevel/S*; do …ดังนั้นมันจะเป็นไปตามลำดับการขยายแบบกลม เช่นตัวเลข / ตัวอักษร คำตอบที่ยาวคือรหัสในนั้นมีความซับซ้อนมากกว่าที่ฉันจำได้ ฉันจะพยายามใช้เวลาศึกษาอย่างจริงจังในช่วงหกถึงแปดสัปดาห์ข้างหน้า ได้อย่างรวดเร็วก่อนดูเหมือนว่ามันสกัดจำนวนหลังจากที่Sและการทำอะไรกับมันดังนั้นS42beeblebroxและS42zaphodอาจจะมีการเชื่อมโยงกว่าแน่นมากขึ้นพูดและS43arthur S44dent
G-Man กล่าวว่า 'Reinstate Monica'

ขอบคุณจริงๆสำหรับคำตอบที่ดี แต่ฉันมีคำถาม ฉันทำให้โปรแกรมของฉันเริ่มทำงาน แต่ความเร็วของแอพต่ำ: stackoverflow.com/questions/49251955//
H.Ghassami

4

1) ไดเรกทอรี rcX.d หลายรายการระบุบริการที่จะเริ่มหรือหยุดในระหว่างการรัน 'X'

2) rc0.d สำหรับ runlevel 0 ซึ่งเป็นการปิดระบบ rc6.d สำหรับรีบูท ส่วนที่เหลือทั้งหมดนั้นสำหรับ runlevels ที่แตกต่างกัน (2 - 5) S หมายถึงการเริ่มต้นและ K สำหรับการฆ่า นี่คือลิงก์ไปยังสคริปต์ดั้งเดิมใน /etc/rc.d หมายเลขหลังจาก S / K คือลำดับความสำคัญที่บริการจะเริ่มต้น / ฆ่า

3) ใช่หากมีการระบุไว้หลายครั้งสคริปต์เริ่มต้น / ฆ่าจะทำงานหลายครั้ง แต่ไม่มีใครอยากทำ

4) ดูหมายเลขลำดับความสำคัญบริการ ntp จะเริ่มตามด้วย dovecot ก่อน

5) จุดที่ 4 เป็นวิธี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.