จะลบ systemd units ที่หายไปได้อย่างไร


40

ฉันมีปัญหาในการหาวิธีลบ systemd units ที่ไม่มีไฟล์อีกต่อไป พวกเขาดูเหมือนจะยังคงอยู่ในระบบอย่างใด

หน่วยที่ชำรุดเก่าที่ฉันพยายามลบ:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

ไฟล์ไม่มีอยู่ แต่การโหลดซ้ำยังคงมีหน่วยเหล่านี้อยู่:

core@ip-172-16-32-83 ~ $ systemctl list-unit-files firehose-router@02.service
core@ip-172-16-32-83 ~ $ sudo systemctl daemon-reload
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

ไม่มีไฟล์ที่เกี่ยวข้องกับไฟล์เหล่านั้นที่ฉันสามารถค้นหาได้:

core@ip-172-16-32-83 ~ $ sudo find /var/run/systemd -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /etc/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /usr/lib/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $

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


คุณไม่ได้พูดถึงมัน แต่ฉันเดาว่ามันจะล้มเหลวถ้าคุณลองsystemctl disableพวกเขาใช่ไหม
dawud

2
มันมีอยู่ด้วย 0 ไม่มีอะไรที่จะปิดการใช้งาน (มันหายไป / ปิดการใช้งานแล้ว)
Andy Shinn

ฉันลองวิธีแก้ปัญหาทั้งหมดที่แนะนำที่นี่ (และต่ำกว่านั้น) และรีบูตเครื่องและไม่มีอะไรทำงาน หน่วยที่ฉันพยายามลบถูกติดตั้งครั้งเดียวหรือพยายามติดตั้งแล้วหลังจากนั้นก็จะถูกลบออกไป ดังนั้นล้าง apt เห็นได้ชัดไม่ได้ลบการกำหนดค่าที่กำหนดให้กับ systemd มันยังไม่ชัดเจนสำหรับฉันหากหน่วย "ไม่พบ" เหล่านี้ทำให้เกิดปัญหาใด ๆ
มุมมองรูปไข่

ฉันสงสัยว่าฉันอาจจะสามารถลบไฟล์ใน / var / lib / systemd / deb-systemd-helper-enabled / แต่ฉันไม่แน่ใจว่าฉันต้องการยุ่งกับเรื่องนี้หรือไม่ ฉันดูเหมือนจะมีคนตายสองคนที่รู้จักกันที่นั่น: mariadb.service.dsh- ยังและ mysql.service.dsh- ยัง
ดูรูปไข่

@Elipticalview ทำการสำรองข้อมูลของไฟล์เหล่านี้ในกรณีและหลังจากนั้นลบออกหรือไม่
gf_

คำตอบ:


74

คำสั่งที่คุณตามมาคือ systemctl reset-failed


3
ขอขอบคุณ! ฉันไม่รู้ว่าทำไมถึงไม่ชัดเจนสำหรับฉัน ...
Andy Shinn

5
วิธีนี้ใช้ในการล้างบริการ "ของจริง" ในที่สุด แต่ฉันมีบริการนามแฝงที่ปฏิเสธที่จะออกไป ฉันพยายามdisable, daemon-reloadและreset-failedแต่บริการนามแฝงขึ้นมาเป็นnot-found inactive deadเสมอ ฉันยังค้นหาดิสก์เพื่อค้นหาสิ่งที่ตรงกับชื่อบริการโดยไม่มีผลลัพธ์
Mark Lakata

3
ฉันเพิ่งพบเจอปัญหานี้และsystemctl stop <service>ทำงานให้ฉัน
mpontillo

เช่นเดียวกับตัวจับเวลา - พวกเขาต้องหยุดก่อนก่อนreset-failedจึงจะสามารถทำความสะอาดได้
rustyx

ชนิดของงานสำหรับฉัน แต่ฉันต้องสวมหน้ากากแล้วเปิดโปงครั้งแรกสำหรับพวกเขา นอกจากนี้ยังต้องหยุดหนึ่งหน้ากากแล้วเปิดโปงหลังจากที่การรีเซ็ตล้มเหลวในที่สุดก็กำจัดทั้งหมด
tgunr

2

เมื่อ systemd วิเคราะห์ไฟล์คำจำกัดความหน่วยจะรับทราบหน่วยอื่น ๆ ที่เกี่ยวข้องที่เรียกใช้ในไฟล์ - ไม่ว่าจะเป็นหน่วยอื่น ๆ ที่มีอยู่หรือไม่

$ systemctl --state=not-found --all
> ( ...prints list of 'not-found' units )

$ grep -r "<missing-unit>" /usr/lib/systemd/system
> ( returns files with references to <missing-unit> )

เมื่อหน่วยแสดงเป็น "ไม่พบ" มันไม่จำเป็นต้องมีข้อผิดพลาด - สิ่งที่เรารู้คือคำจำกัดความของหน่วยในท้องถิ่นอ้างว่ามีความสัมพันธ์กับมัน ความสัมพันธ์นี้อาจไม่ใช่สิ่งที่เราใส่ใจ ตัวอย่างเช่นอาจเป็น"Before:"หน่วยอื่น แต่เราไม่ได้ใช้หน่วยอื่น


0

ดูเหมือนว่า systemd จะดูแลลิงก์ แต่ไม่รู้ว่าจะทำอย่างไรเมื่อคุณลบไฟล์หน่วย

คุณสามารถลองลบออกด้วยตนเอง/etc/systemd/system/suspend.target.wants/และแน่นอนsystemctl reset-failedจากคำตอบก่อนหน้าดูเหมือนจะเป็นตัวเลือกที่ดีกว่า

$ cd /etc/systemd/system
$ sudo mv lock.service /tmp 
$ sudo systemctl disable lock.service
Failed to disable unit: No such file or directory
$ sudo mv /tmp/lock.service .
$ sudo systemctl disable lock.service
Removed /etc/systemd/system/suspend.target.wants/lock.service.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.