เนื่องจากคำถามชัดเจนจากชื่อฉันจะเปลี่ยนลำดับการเริ่มต้น / บูทบริการ Linux ได้อย่างไร
เนื่องจากคำถามชัดเจนจากชื่อฉันจะเปลี่ยนลำดับการเริ่มต้น / บูทบริการ Linux ได้อย่างไร
คำตอบ:
คุณสามารถเปลี่ยนลำดับโดยเปลี่ยนชื่อ symlink ภายใต้ /etc/rcX.d/ โดยที่ x จะเป็นระดับการทำงานของคุณ
คุณจะเห็นกลุ่มของไฟล์ที่เริ่มต้นด้วย Sxx หรือ Kxx ลิงก์ S จะถูกติดตามในระหว่างการเริ่มต้นในขณะที่ K ถูกแยกวิเคราะห์เพื่อปิด xx ที่นี่แสดงถึงการสั่งซื้อ
แต่คำสั่งนี้มีการตั้งค่าด้วยเหตุผลดังนั้นโปรดระมัดระวังในขณะที่เปลี่ยนมันตัวอย่างเช่น ntpd ควรเริ่มทำงานหลังจากที่ระบบย่อยเครือข่ายเริ่มต้นแล้ว
แทนที่จะทำด้วยตนเองเช่นแนะนำในคำตอบอื่น ๆ คุณสามารถเปลี่ยนสคริปต์เริ่มต้น เพียงเพิ่มบรรทัดดังกล่าวในส่วนหัว:
# chkconfig: 35 90 10
สิ่งนี้จะแนะนำchkconfig
ให้เพิ่มบริการในระดับ 3 และ 5 โดยมีตำแหน่งเริ่มต้นที่ 90 และตำแหน่งฆ่า 10
chkconfig off servicename && chkconfig on servicename
คุณต้องการอ่านเล็กน้อยเกี่ยวกับไดเรกทอรีrunlevels และ rc.d ของคุณ ภายในไดเรกทอรี rc.d คุณจะพบลิงค์ S และ K เช่น S20apache K10apache นั่นเป็นสิ่งที่สั่งให้เริ่มต้น / ปิดสคริปต์
มีการเปลี่ยนแปลงบางอย่างในสถาปัตยกรรมนี้ แต่ส่วนใหญ่ของ linux ยังคงใช้มันอยู่
rcorder
เคยมีมาระยะหนึ่งแล้ว
svc
ริส แต่ทำได้โดยไม่ต้องมี XML
หากคุณมาที่นี่โอกาสที่คุณจะมีสองบริการที่หนึ่งขึ้นอยู่กับอีก แต่เนื่องจากพวกเขาเริ่มในลำดับที่ไม่ถูกต้องหนึ่งที่มีการอ้างอิงจะไม่สามารถเริ่มต้น คำแนะนำเกี่ยวกับการแก้ไข symlink เป็นข้อมูลในแง่ของการแสดงให้เห็นว่าลำดับการเริ่มต้นทำงานอย่างไรและจะทำงานได้ดีจนกระทั่งมีคนทำ "chkconfig on" บนบริการของคุณ ณ จุดที่ symlink นั้นจะถูกสร้างขึ้นใหม่เหมือนเดิม ที่จริงแล้วคุณต้องการจัดการกับปัญหาที่ระดับสคริปต์เริ่มต้นซึ่งจริงๆแล้วยุ่งน้อยกว่ากันมาก นอกจากนี้ยังจะสอดคล้องกันใน runlevels ที่แตกต่างกัน คุณอาจไม่จำเป็นต้องเพิ่มบรรทัด "# chkconfig" ตามที่แนะนำในคำตอบ 4 เนื่องจากอาจมีบรรทัดที่คล้ายกันอยู่ในนั้น
ฉันจะใช้ตัวอย่างของเซิร์ฟเวอร์ที่ใช้ Openldap (slapd) กับแบ็กเอนด์ฐานข้อมูล MySQL (mysqld) การกำหนดค่าคู่นั้นและสาเหตุที่คุณอาจต้องการเป็นเรื่องราวอื่นทั้งหมด
ในการบูต Openldap ล้มเหลวในการเริ่มต้นเนื่องจากมันขึ้นอยู่กับ MySQL และลำดับการเริ่มต้นพยายามที่จะเริ่มก่อนหน้า - slapd มีตำแหน่ง 27 และ mysqld มีตำแหน่ง 64
ลิงก์ที่เกี่ยวข้องใน /etc/rc3.d/ คือ
S27slapd -> ../init.d/slapd
and
S64mysqld -> ../init.d/mysqld
ฉันค้นหาค่าที่ตั้งในสคริปต์เริ่มต้นสองตัว:
[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36
[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73
ฉันแก้ไขบรรทัด chkconfig ใน /etc/rc.d/init.d/slapd เพื่อให้ตำแหน่งเริ่มต้นสูงกว่าหนึ่งใน /etc/rc.d/init.d/mysqld (ฉันเลือก 85)
[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73
ฉันทำ "chkconfig slapd on" และตรวจสอบ symlink อีกครั้ง
[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx 1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx 1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd
ตอนนี้เมื่อเซิร์ฟเวอร์นี้เริ่มทำงาน mysqld จะเริ่มก่อน slapd และถูกต้องกับโลก