วิธีการเปลี่ยนลำดับการเริ่มต้น / บูทบริการของ Linux


14

เนื่องจากคำถามชัดเจนจากชื่อฉันจะเปลี่ยนลำดับการเริ่มต้น / บูทบริการ Linux ได้อย่างไร


สำหรับวิธีการแก้ปัญหา systemd: unix.stackexchange.com/questions/206093/…
Musa Haidari

คำตอบ:


11

คุณสามารถเปลี่ยนลำดับโดยเปลี่ยนชื่อ symlink ภายใต้ /etc/rcX.d/ โดยที่ x จะเป็นระดับการทำงานของคุณ

คุณจะเห็นกลุ่มของไฟล์ที่เริ่มต้นด้วย Sxx หรือ Kxx ลิงก์ S จะถูกติดตามในระหว่างการเริ่มต้นในขณะที่ K ถูกแยกวิเคราะห์เพื่อปิด xx ที่นี่แสดงถึงการสั่งซื้อ

แต่คำสั่งนี้มีการตั้งค่าด้วยเหตุผลดังนั้นโปรดระมัดระวังในขณะที่เปลี่ยนมันตัวอย่างเช่น ntpd ควรเริ่มทำงานหลังจากที่ระบบย่อยเครือข่ายเริ่มต้นแล้ว


21

แทนที่จะทำด้วยตนเองเช่นแนะนำในคำตอบอื่น ๆ คุณสามารถเปลี่ยนสคริปต์เริ่มต้น เพียงเพิ่มบรรทัดดังกล่าวในส่วนหัว:

# chkconfig: 35 90 10

สิ่งนี้จะแนะนำchkconfigให้เพิ่มบริการในระดับ 3 และ 5 โดยมีตำแหน่งเริ่มต้นที่ 90 และตำแหน่งฆ่า 10


นี้. อย่างนี้ หากคุณเปลี่ยนชื่อchkconfig off servicename && chkconfig on servicename
symlink

ทำงานเหมือนจับใจ ฉันต้องการกำหนดค่าการพึ่งพาระหว่าง mysqld และ servlet container ฉันไม่สามารถหาตำแหน่งเริ่มต้นของ mysqld ดังนั้นฉันจึงกำหนดค่าตำแหน่งเริ่มต้นของคอนเทนเนอร์ servlet เป็น 99 และใช้งานได้ดี mysqld เริ่มต้นก่อน ขอบคุณ
jpangamarca

7

คุณต้องการอ่านเล็กน้อยเกี่ยวกับไดเรกทอรีrunlevels และ rc.d ของคุณ ภายในไดเรกทอรี rc.d คุณจะพบลิงค์ S และ K เช่น S20apache K10apache นั่นเป็นสิ่งที่สั่งให้เริ่มต้น / ปิดสคริปต์

มีการเปลี่ยนแปลงบางอย่างในสถาปัตยกรรมนี้ แต่ส่วนใหญ่ของ linux ยังคงใช้มันอยู่


ฉันประหลาดใจที่ distros ส่วนใหญ่ยังคงใช้ระบบนี้อยู่ ระบบที่ดีกว่าrcorderเคยมีมาระยะหนึ่งแล้ว
Chris S

ฉันรู้สึกอิจฉาโซลาsvcริส แต่ทำได้โดยไม่ต้องมี XML
coredump

นี่คือจุดที่ อย่างไรก็ตามคุณอาจมีวิธีต่าง ๆ ในการแก้ไขค่านี้ทั้งนี้ขึ้นอยู่กับ distro ของคุณดังนั้นโปรดอ่านเอกสารเฉพาะสำหรับ distro ของคุณ
แอนดรูว์เอ็ม.


7

หากคุณมาที่นี่โอกาสที่คุณจะมีสองบริการที่หนึ่งขึ้นอยู่กับอีก แต่เนื่องจากพวกเขาเริ่มในลำดับที่ไม่ถูกต้องหนึ่งที่มีการอ้างอิงจะไม่สามารถเริ่มต้น คำแนะนำเกี่ยวกับการแก้ไข 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 และถูกต้องกับโลก

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