วิธีลบบริการ systemd


179

ถ้าผมติดตั้งบริการใหม่แล้วตัดสินใจฉันไม่ต้องการโปรแกรมที่อีกต่อไปและลบมันบริการจะยังคงอยู่ในการส่งออกจากsystemctlเป็นข้อผิดพลาด

สิ่งนี้มาจากไหนและฉันจะลบออกได้อย่างไร

คำตอบ:


289

สูตรของฉันสำหรับการกำจัดบริการ (โปรดระมัดระวังด้วยrmคำสั่ง!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

อาจเป็นไปได้ว่าบริการ systemd 'ปิด' สคริปต์แบบเก่าใน /etc/init.d ดังนั้นคุณอาจต้องการล้างข้อมูลด้วยเช่นกัน แต่นั่นไม่ใช่ตำแหน่งที่บริการ systemd ใช้งานอยู่


7
โปรดทราบว่ามีหลายสถานที่ที่ไฟล์หน่วย Systemd จะถูกเก็บไว้ที่สะดุดตาและยัง/usr/lib/systemd/system /etc/systemd/system/สำหรับการอ้างอิงดู: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington

6
ฉันต้องลบออก/etc/init.d/[servicename]ก่อนที่จะเริ่มทำงานsystemctl reset-failed
Andrea

4
ใช่ฉันลืมปิดการใช้งานก่อนที่จะลบไฟล์หน่วย BTW, systemctl cat [servicename]การค้นหาไฟล์ทุกหน่วยที่จะเอาผมตรวจสอบการส่งออกของ
อาเมียร์

มันอาจจะเป็นสคริปต์แบบเก่าที่ "ห่อ" ใน /etc/init.d/ แต่ถ้าคุณไม่ลบมันคุณจะพบว่ามันยังคงปรากฏอยู่ภายใต้บริการที่เหลือจากการลบของคุณ ฉันสามารถบอกคุณได้ว่าเป็นกรณีของฉัน คุณสามารถเพิ่มคำตอบของคุณเพื่อทำให้สมบูรณ์ยิ่งขึ้น แต่หวังว่าบุคคลต่อไปที่ต้องการจะดูความคิดเห็น
Marlon

1
ได้ผลขอบคุณ แต่ฉันไม่แน่ใจว่าทำไมฉันต้องทำความสะอาดขยะด้วยตนเอง
Rolf

25

คุณอาจกำลังมองหาreset-failed:

$ sudo systemctl reset-failed
$

จาก systemd man page:

reset-failed [PATTERN...]

รีเซ็ตสถานะ "ล้มเหลว" ของหน่วยที่ระบุหรือหากไม่มีชื่อหน่วยผ่านให้รีเซ็ตสถานะของหน่วยทั้งหมด เมื่อหน่วยหนึ่งล้มเหลวในบางวิธี (เช่นกระบวนการออกโดยไม่มีรหัสข้อผิดพลาดที่ไม่ใช่ศูนย์ยุติอย่างผิดปกติหรือหมดเวลา) หน่วยจะเข้าสู่สถานะ "ล้มเหลว" โดยอัตโนมัติและรหัสทางออกและสถานะจะถูกบันทึกไว้เพื่อวิปัสสนาจนกระทั่งบริการ ถูกรีสตาร์ทหรือรีเซ็ตด้วยคำสั่งนี้


2
นั่นไม่ใช่คำถามที่ถามเลย ทำไมสิ่งนี้ถึงถูกโหวตขึ้น 17 ครั้ง?
psusi

1
นี่เป็นคำตอบเดียวที่ถูกต้อง อีกอันที่มี upvotes มากขึ้นและเครื่องหมายถูกเป็นวิธีแก้ปัญหา
โทมัส

1
ฉันยังไม่ได้อ่านคำถามของ OP แต่นี่คือคำตอบที่ฉันต้องการ
CousinCocaine

23

ดูเหมือนว่าคุณจะถอนการติดตั้ง แต่ไม่ได้ลบ systemd hook:

# systemctl disable [servicename]


4

การเพิ่มคำตอบของ@ mark-lakataและคำนึงถึงความใส่ใจที่จำเป็นสำหรับrmคำสั่ง [chkconfig]สามารถลดความซับซ้อนของกระบวนการ! ( คลิกที่นี่เพื่ออ่านเกี่ยวกับ chkconfig )

หากต้องการย้ำรายการคำสั่งอีกครั้ง:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

หมายเหตุ: คำสั่งที่ 1 เป็นทางเลือกขึ้นอยู่กับว่าคุณต้องการให้บริการยังคงทำงานอยู่ในเซสชันปัจจุบันหรือไม่ (สำหรับคำถามนี้ควรใช้คำสั่งนี้)

คำสั่งที่ 2 ดูแลทั้งการปิดและการลบ (ตาม symlink) บริการ


1
chkconfigเป็นคำสั่งดั้งเดิมเพื่อเปิด / ปิดการใช้งานบริการ SysVinit ในระบบที่ใช้systemdอาจเป็นคำสั่งที่เข้ากันได้แบบย้อนหลัง แต่systemctlคำสั่งพื้นฐานนั้นเรียบง่าย:systemctl disable [servicename]
telcoM

1
โอเค แต่เหตุผลที่ฉันใช้คำสั่งนี้คือคุณไม่จำเป็นต้องเรียกใช้คำสั่ง rm อย่างแน่นอน
garlicFrancium

1

การลบบริการออกจาก systemd:

Systemd ใช้หน่วย (ไฟล์เพื่อกำหนดบริการ) เพื่อลบบริการที่ต้องลบยูนิต ... นี่คือรายการของที่ตั้งหน่วย:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

รีเฟรช systemd:

systemctl daemon-reload
systemctl reset-failed

บริการผี (ไม่พบ):

Systemd สามารถแสดงรายการ ghost (not-found) services แม้ว่าหน่วยจะถูกลบด้วยเหตุผลหลายประการ

  1. หน่วยยังคงปรากฏอยู่ในหนึ่งในไดเรกทอรี systemd
  2. หน่วยไม่ออก แต่ลิงก์ไฟล์ยังคงปรากฏอยู่ในหนึ่งในไดเรกทอรี systemd
  3. บริการนี้ใช้ในหน่วยอื่น *

(*) หากมีการกล่าวถึงบริการในหน่วยอื่น แต่ไม่มี systemd จะยังคงแสดงรายการบริการที่มีสถานะที่ไม่พบแม้ว่าจะไม่มีไฟล์หน่วย ... คุณสามารถค้นหาสิ่งที่หน่วยใช้บริการนั้นด้วยการค้นหาข้อความ และแก้ไขหน่วยเหล่านั้น (ไม่แนะนำหากคุณวางแผนที่จะติดตั้งบริการนั้นในภายหลัง)

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