วิธีปิดใช้งานบริการโดยไม่ใช้ 'systemctl ปิดการใช้งาน'


12

มีบริการที่ฉันต้องการเรียกใช้เฉพาะเมื่อบริการอื่นล้มเหลว ( [Unit] OnFailure=foo) แต่ฉันไม่ต้องการให้บริการนี้ ( foo) เริ่มทำงานโดยอัตโนมัติเมื่อบูต ทางเลือกหนึ่งกำลังทำงานอยู่systemctl disable fooแต่ฉันกำลังมองหาวิธีอื่น

แบ็คกราวด์: ฉันกำลังสร้างอิมเมจระบบปฏิบัติการและฉันไม่ต้องการบูตเครื่องให้รันคำสั่งนั้น ( systemctl disable foo) จากนั้นปิดเครื่องก่อนที่จะประกาศอิมเมจของฉันเป็นครั้งสุดท้าย

คำตอบ:


4

บริการทั้งหมดจะ "ปิดการใช้งาน" โดยค่าเริ่มต้น; "การเปิดใช้งาน" เป็นการเลือกใช้

หากfoo.serviceเป็นบริการที่กำหนดเองของคุณจะไม่สามารถเริ่มต้นได้เว้นแต่จะมีบางอย่างเข้ามา (เช่นOnFailure=คำสั่ง) และคุณไม่ควร "ปิดการใช้งาน" อะไร


ดังนั้นโดยทั่วไปคุณ "รับฟังก์ชั่นนี้ได้ฟรี" ถ้าไม่ได้เปิดใช้งาน foo ก่อนหน้านี้
rogerdpack

26

systemctl enableทำงานโดยจัดการกับ symlink ใน/etc/systemd/system/(สำหรับ system daemons) เมื่อคุณenableบริการมันจะดูที่WantedByบรรทัดใน[Install]ส่วนและจุดบกพร่อง symlinks ใน.wantsไดเรกทอรีเหล่านั้น

systemctl disable ไม่ตรงข้าม

คุณก็สามารถลบ systemctl disablesymlinks-ทำเหล่านั้นด้วยมือเทียบเท่าอย่างเต็มที่ที่จะใช้


นี่จะเป็นบริการที่ยังไม่ได้ดำเนินการโดย systemd (เป็นแบบกำหนดเอง) ดังนั้นจึงไม่มี symlink เพิ่มเติมเหล่านั้น ฉันคาดเดาสิ่งเหล่านั้นจะถูกสร้างขึ้นในการบูตครั้งแรก?
tshepang

3
@Shepang ไม่ควรเปิดใช้งานเว้นแต่คุณจะเปิดใช้งานด้วยตนเอง (หรือในสคริปต์)
Derobert

1
โอ้ฉันคิดว่ามันจะเปิดใช้งานโดยอัตโนมัติ (ซึ่งเป็นสิ่งที่ฉันคาดหวังจากการติดตั้งแพ็คเกจ Debian) ดีแล้วที่รู้.
tshepang

3
@Tshepang นั่นเป็นสคริปต์ postinst ในแพ็คเกจที่เปิดใช้งาน หรือฉันคิดว่าการจัดส่ง symlink ในแพ็คเกจไม่แน่ใจว่าพวกเขาทำอย่างนั้นหรือไม่
Derobert

4

คุณสามารถใช้systemctl start ServiceName.serviceและsystemctl stop Service.Name.serviceเพื่อเริ่มและหยุดบริการตามลำดับ ในทางตรงกันข้ามกับsystemctl enable ...และsystemctl disable ...คำสั่งเริ่มต้นและหยุดเพียงครั้งสุดท้ายสำหรับเซสชั่นปัจจุบันดังนั้นเมื่อคุณรีบูตเครื่องการเปลี่ยนแปลงจะไม่ถูกบันทึกไว้

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