Ubuntu12.04: วิธีการปิดการใช้งานกระบวนการ daemon เมื่อเริ่มต้น


23

ผมปกติใช้service start/stopหรือinitctl start/stopการเริ่มต้นหรือหยุดกระบวนการภูต mysqldแต่ตอนนี้สิ่งที่ฉันกำลังมองหาคือการปิดกระบวนการภูตจากเริ่มต้นที่ตัวอย่างเช่นการเริ่มต้น

ขณะนี้สิ่งที่ฉันกำลังทำคือการเปลี่ยนชื่อ/etc/init/mysql.confเป็น/etc/init/mysql.conf.bakแต่หลังจากอ่านเพียงเล็กน้อยเกี่ยวกับsystemdฉันก็รู้ว่ามันมีenable & disableตัวเลือกสำหรับงานดังกล่าวข้างต้น

ดังนั้นจะมีบางสิ่งบางอย่างที่คล้ายกันในอูบุนตู 12.04 upstartกับ


คุณบอกว่าคุณกำลังใช้ systemd? ฉันใช้บนคอมพิวเตอร์ Fedora 17 ของฉัน systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe

1
@BenjiWiebe: ไม่ฉันไม่ได้ใช้ systemd ฉันใช้พุ่งพรวดเพราะ systemd ไม่ใช่ค่าเริ่มต้นใน Ubuntu 12.04 / 12.10
RanRag

1
โอ้ฉันเห็นแล้วตอนนี้ ... ไม่แน่ใจว่าฉันคิดอะไรอยู่
BenjiWiebe

คำตอบ:


26

คุณสามารถปิดการใช้งานบริการโดยใช้คำสั่งต่อไปนี้:

sudo update-rc.d -f <service name> disable

ตัดตอนมาหน้าชาย :

เมื่อรันด้วยตัวเลือกปิดการใช้งาน [S | 2 | 3 | 4 | 5] update-rc.d จะแก้ไขลิงก์ runlevel ที่มีอยู่สำหรับสคริปต์ /etc/init.d/name โดยเปลี่ยนชื่อลิงค์เริ่มต้นเพื่อหยุดลิงค์ด้วยหมายเลขลำดับที่เท่ากัน ความแตกต่างของ 100 ลบหมายเลขลำดับเดิม


2
ฉันไม่มีชื่อเสียงพอที่จะลงคะแนนเสียงและทำเช่นนี้โดยไม่มีคำอธิบายจะไม่สุภาพเลยดังนั้นเพียงแค่แสดงความคิดเห็น: คำถามโดย @Noob เกี่ยวข้องกับ Ubuntu 12.04 ซึ่งใช้การพุ่งพรวด (/etc/init/*.conf) ไฟล์) สำหรับระบบ daemons ส่วนใหญ่ (ตามที่กล่าวถึงโดย @Noob) ในขณะที่ข้อเสนอแนะของคุณใช้ได้กับ daemons ที่เริ่มใช้สคริปต์ใน /etc/init.d/* (สไตล์ SysV เก่า) แก้ไข: สำหรับบันทึก warl0ck มีคำตอบที่ถูกต้อง (ขอบคุณ!)
xolox

3
คำถามเกี่ยวกับสถานการณ์สมมุติหรือโดยทั่วไปโดยใช้ mysql เป็นกรณีเฉพาะ OP ดูอย่างน้อยก็บางส่วนทราบคำตอบนี้ แต่อาจให้บริการลูกหลานดีเพื่อทราบว่าแพคเกจที่มีประโยชน์ไม่ได้และจะไม่ให้เกียรติรูปแบบที่พุ่งพรวด (เช่น webmin และสร้างขึ้นเองจากแพ็คเกจซอร์สรอบเวลาแสดงความคิดเห็น) . นั่นหมายความว่าวิธีการนี้อาจเป็นคำตอบบางส่วนที่ถูกต้องสำหรับบริบทเช่นเดียวกับคำตอบของ warl0ck และ Mark ทำเพื่อระบุจุดเฉพาะของบริการ mysql สมมุติฐานที่ติดตั้งกับตัวจัดการแพคเกจ
JustinC

ไม่จำเป็นต้องใช้แฟล็ก -f
dannyman

20

วิธีที่ถูกต้องในการปิดและเปิดบริการคือสร้างไฟล์ XX.override

echo 'manual' > /etc/init/mysqld.override

วิธีนี้บริการพุ่งพรวดจะไม่เริ่มต้นโดยอัตโนมัติ


ยังใช้งานได้Ubuntu 12.04หรือไม่
RSK

@RSK ใช่ทำไมคุณไม่ลองดูล่ะ
เดซี่

1
ฉันพยายามแล้วก็ไม่ได้ผล Lemme ลองอีกครั้งและจะอัปเดตคุณ
RSK

ไม่มันไม่ทำงานบน Ubuntu-14.04
Hi-Angel

1
@RSK yes, why don't you just give it a try?ฉันคิดว่าเพราะมันไม่สะดวกที่จะรีสตาร์ทระบบด้วย "ลอง" ทุกคำแนะนำจากหน้านี้
user907860

7

@ warl0ck ถูกต้องแล้ว ต้องการเพิ่มว่าข้อมูลนี้ได้รับการบันทึกไว้ค่อนข้างดีในเอกสาร Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

โดยเฉพาะ:

ด้วย Upstart 1.3 คุณสามารถใช้ประโยชน์จากไฟล์แทนที่และ stanza แบบแมนนวลเพื่อให้ได้ผลลัพธ์เดียวกันในลักษณะที่ง่ายขึ้น [27]:

# echo "manual" >> /etc/init/myjob.override

โปรดทราบว่าคุณสามารถใช้เอฟเฟกต์เดียวกันได้โดยทำสิ่งนี้:

# echo "manual" >> /etc/init/myjob.conf

อย่างไรก็ตามการใช้สิ่งอำนวยความสะดวกการแทนที่หมายความว่าคุณสามารถปล่อยให้ไฟล์การกำหนดค่างานดั้งเดิมไม่ถูกแตะต้อง

หากต้องการย้อนกลับไปสู่พฤติกรรมดั้งเดิมให้ลบหรือเปลี่ยนชื่อไฟล์แทนที่ (หรือลบไฟล์ stanza ด้วยตนเองออกจากไฟล์ ".conf" ของคุณ)


5

นอกจากนี้ยังมีซอฟต์แวร์ที่ช่วยในการนี้ มันเรียกว่า rcconf

เพียงดาวน์โหลดโดยใช้:

sudo apt-get install rcconf

และใช้กับคำสั่ง

rcconf

คุณจะได้รับอินเตอร์เฟสที่ดี (commandline) เพื่อปิด / เปิดใช้งานบริการต่างๆ


สิ่งนี้ไม่รวมอยู่ในระบบดังนั้นควรติดตั้งสิ่งต่าง ๆ เพิ่มเติมซึ่งไม่ใช่คำตอบที่ดีกว่า
m3nda

แต่มีประโยชน์จริง ๆ : D
Magico

1

ลองนำทางไปยัง/etc/rc2.dและเปลี่ยนชื่อสิ่งที่คุณไม่ต้องการให้ทำงานเมื่อเริ่มต้น: เปลี่ยน "S" เริ่มต้นเป็น "K" เป็น "K" (เช่นS02mysqlเป็นK02mysql) หากคุณเปลี่ยนใจเพียงแค่ย้อนกลับ ฉันคิดว่า 2 หมายถึง runlevel ในกรณีที่ 2 เป็นค่าเริ่มต้น multiuser runlevel อาจเป็นที่ที่คุณมีสิ่งต่าง ๆ ส่วนใหญ่สำหรับการใช้คอมพิวเตอร์แบบวันต่อวัน

แก้ไข : อ่านความคิดเห็นของ James O'Gorman ด้านล่าง


1
ใช่ '2' หมายถึงระดับการทำงาน คุณสามารถตรวจสอบการทำงานในระดับปัจจุบันของคุณโดยใช้หรือwho -r runlevel
RanRag

who --runlevelที่จริง
Emanuel Berg

1
แม้ว่าสิ่งนี้จะบรรลุสิ่งที่คุณต้องการ แต่มันเป็นสิ่งผิดปกติทางเทคนิคที่ต้องทำ ในเงื่อนไข SysV init สคริปต์ 'S' เป็นสคริปต์เริ่มต้นและ 'K' เป็นสคริปต์ที่ฆ่า - นั่นคือ S จะทำงานตามลำดับเมื่อเริ่มต้นและ K จะทำงานตามลำดับเมื่อปิดเครื่อง (หรือเปลี่ยนเป็นระดับล่าง)
James O'Gorman

@ JamesO'Gorman: น่าสนใจฉันอยู่ใน Debian คุณกำลังพูดว่า "สคริปต์ K" ของฉันทำงานเมื่อปิดเครื่องหรือไม่? มีจดหมายบางส่วนที่สามารถใช้ในการปิดการใช้งานสคริปต์ทั้งหมดโดยไม่มีอันตรายหรือไม่? (เป็นวิธีปฏิบัติที่จะเก็บไว้ในโฟลเดอร์เดียวกันหากมีสถานการณ์ใหม่เกิดขึ้นในที่ที่คุณต้องการ)
Emanuel Berg

@EmanuelBerg ใช่initจะใช้งาน 'KXXscript stop' เมื่อปิดเครื่อง คุณควรลบ symlink หรือลบบิตการเรียกใช้ออกจากสคริปต์เริ่มต้นจริง ฉันเชื่อว่า Debian ใช้update-rc.dเพื่อจัดการสิ่งนี้ RHEL (และอนุพันธ์) chkconfigการใช้งาน
James O'Gorman

0

/etc/init/ด้วยการพุ่งพรวดการกำหนดค่าบริการในการโกหกไฟล์ใน ตัวอย่างเช่น ssh ถูกควบคุมโดยใช้ไฟล์ปรับแต่ง/etc/init/ssh.conf

ไฟล์นี้ระบุ "กิจกรรม" ซึ่งจะแจ้งให้พุ่งพรวดเพื่อเริ่มต้น "งาน"

เพื่อป้องกันไม่ให้บริการเริ่มต้นโดยอัตโนมัติคุณสามารถใช้หนึ่งในหลายวิธีดังนี้
a) เปลี่ยนชื่อไฟล์ service.conf เพื่อไม่ให้ลงท้ายด้วย. conf
b) ใส่เครื่องหมาย "เริ่มต้น" จากไฟล์ service.conf

ในเวอร์ชันที่ใหม่กว่าของ upstart (ตั้งแต่ v1.3 เป็นอย่างน้อย) คุณยังสามารถแทนที่การเริ่มต้นออนไลน์โดยใช้ไฟล์ service.override ดังนั้นคุณสามารถใช้:
# echo manual > /etc/init/service.override

สุดท้ายคุณสามารถเพิ่มคำว่า "คู่มือ" ลงในท้ายไฟล์กำหนดค่าของบริการเช่นผ่าน:
# echo manual >> /etc/init/service.conf

โปรดทราบว่านี่ไม่ได้ "หยุด" บริการที่กำลังทำงานมันเพียงป้องกันไม่ให้เริ่มโดยอัตโนมัติ ในขณะที่ตั้งค่าสำหรับการเริ่มต้น "ด้วยตนเอง" คุณสามารถควบคุมบริการโดยใช้ initctl เช่นเพื่อหยุดและเริ่ม SSH daemon:
# initctl stop ssh
# initctl start ssh

เอกสารที่ดีที่สุดสำหรับ Upstart อยู่ที่http://upstart.ubuntu.com/cookbook/

ส่วนที่ 11.44 ครอบคลุม "ปิดใช้งานบริการจากการเริ่มต้นอัตโนมัติที่นี่: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

ฉันต้องบอกว่าคำสั่ง

echo "manual" >> /etc/init/myjob.override

เป็นการทำให้เข้าใจผิดเล็กน้อยเนื่องจากหมายถึงการผนวกไฟล์แทนที่ ฉันทดสอบสิ่งนี้ใน 14.04 กับผู้จัดการเครือข่ายและการทำงานต่อไปนี้ไม่ทำงาน

vim /etc/init/network-manager.override:
start
manual

อย่างไรก็ตามเรื่องนี้ใช้ได้ผล

vim /etc/init/network-manager.override:
#start
manual

ดังนั้น IMO, initctl จะค้นหาบรรทัดที่ไม่มีเครื่องหมายข้อคิดเห็นแรกและดำเนินการ บางทีฉันผิด แต่นั่นคือผลการทดสอบของฉัน ยินดีต้อนรับอินพุต

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