เหตุใด systemd จึงหยุดทำงานในระหว่างการรีบูต


13

1 จาก 10 ครั้ง systemd ค้างระหว่างรีบูต ฉันไม่เข้าใจเหตุผล ฉันควรดูที่สิ่งใดเพื่อแก้ไขปัญหา ฉันใช้ systemd v196 และไม่สามารถอัปเกรดเป็นรุ่น> = 198 ได้เพราะรุ่นหลังต้องใช้เคอร์เนลล่าสุด (พร้อมรองรับ cgroups) ซึ่งไม่สามารถอัพเดตได้ตามความต้องการของลูกค้า ฉันสงสัยว่ามีวิธีที่สมเหตุสมผลในการค้นหาสาเหตุของพฤติกรรมนี้และทำให้ systemd รีบูตระบบโดยไม่มีเงื่อนไข

โปรดทราบว่าลิงก์นี้ไม่ได้ช่วย: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

ตามที่คุณสามารถอ่านได้ที่นี่:

ปิดเครื่องไม่เสร็จสิ้น

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

use a serial console
use a debug shell - not only is it available from early boot, it also stays active until late shutdown.

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

ฉันไม่เห็นเหตุผล

# cat /etc/systemd/system/
basic.target.wants/                          getty.target.wants/                          multi-user.target.wants/                     sysinit.target.wants/                        
dbus-org.freedesktop.NetworkManager.service  local-fs-pre.target.wants/                   sockets.target.wants/                        syslog.service                               
display-manager.service                      local-fs.target.wants/                       swap.target

หมายเหตุ swap.target มันอยู่ที่นั่น แต่เราไม่ได้ใช้พาร์ติชั่นสลับเลย ฉันพยายามที่จะปิดบังการแลกเปลี่ยน แต่ปัญหาของวิตามินที่แขวนอยู่ บรรทัดสุดท้ายในคอนโซลคือ:

[OK] Stopped target shutdown.

แก้ไข: ดังที่ฉันกล่าวฉันสามารถเข้าสู่ระบบอีกครั้งผ่าน ssh มากกว่าจริยธรรม

ตอนนี้ฉันจะแสดงให้คุณเห็นสองบันทึก บันทึกแรกเกิดขึ้นเมื่อ reboot / shutdwon ค้างในขณะที่บันทึกที่สองคือเมื่อทำการรีบูตสำเร็จ:

Hang case เอาต์พุตจะเป็นแบบนี้เสมอ (บันทึกเต็ม):

[  OK  ] Stopped Network Time Service (one-shot ntpdate mode).
         Stopping Modem and VPN connections autoconnect...
         Stopping Login Service...
         Stopping LSB: Avahi mDNS/DNS-SD Daemon...
[  OK  ] Stopped Monitoring free system resources.
[  OK  ] Stopped Monitoring dropbear socket.
[  OK  ] Stopped Login Service.
[  OK  ] Stopped Modem and VPN c[  OK  ] Stopped Getty on tty1.
[  OK  ] Stopped Serial Getty on ttyO0.
[  OK  ] Unmounted /var/lib/opkg.
[  OK  ] Stopped Network Manager.
[  OK  ] Stopped LSB: Avahi mDNS/DNS-SD Daemon.
         Stopping D-Bus System Message Bus...
[  OK  ] Stopped target Remote File Systems.
[  OK  ] Stopped Suspend manager.
         Stopping X Server...
[  OK  ] Stopped X Server.
         Stopping System Logging Service...
[  OK  ] Stopped System Logging Service.
[   77.580000] g_ether gadget: using random self ethernet address
[   77.580000] g_ether gadget: using random host ethernet address
[   77.590000] usb0: MAC 6e:0d:de:b0:33:4f
[   77.590000] usb0: HOST MAC 62:7a:81:02:f3:ff
[   77.600000] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[   77.600000] g_ether gadget: g_ether ready
[   77.610000] musb-hdrc musb-hdrc.0: MUSB HDRC host driver
[   77.610000] musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 2
[   77.620000] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[   77.630000] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   77.640000] usb usb2: Product: MUSB HDRC host driver
[   77.640000] usb usb2: Manufacturer: Linux 2.6.37 musb-hcd
[   77.650000] usb usb2: SerialNumber: musb-hdrc.0
[   77.650000] hub 2-0:1.0: USB hub found
[   77.660000] hub 2-0:1.0: 1 port detected
[   77.690000] ADDRCONF(NETDEV_UP): usb0: link is not ready
[  OK  ] Stopped target Reboot.
[  OK  ] Stopped Reboot.
[  OK  ] Stopped target Unmount All Filesystems.
[  OK  ] Stopped target Shutdown.
[   78.330000] <46>systemd-journald[328]: Received SIGUSR1
<hang>

รีบูตปกติ:

         Unmounting /var/lib/opkg...
[  OK  ] Stopped target Network.
         Stopping SSH Per-Connection Server...
[  OK  ] Stopped target Graphical Interface.
[  OK  ] Stopped target Multi-User.
         Stopping Monitoring free system resources...
         Stopping Monitoring dropbear socket...
         Stopping Network Time Service (one-shot ntpdate mode)...
[  OK  ] Stopped Network Time Service (one-shot ntpdate mode).
         Stopping Modem and VPN connections autoconnect...
         Stopping Login Service...
         Stopping LSB: Avahi mDNS/DNS-SD Daemon...
[  OK  ] Stopped Monitoring free system resources.
[  OK  ] Stopped Monitoring dropbear socket.
[  OK  ] Stopped Login Service.
[  OK  ] Unmounted /var/lib/opkg.
         Stopping Network Manager...
[  OK  ] Stopped Getty on tty1.
[  OK  ] Stopped Network Manager.
[  OK  ] Stopped Serial Getty on ttyO0.
[  OK  ] Stopped Suspend manager.
[  OK  ] Stopped LSB: Avahi mDNS/DNS-SD Daemon.
         Stopping D-Bus System Message Bus...
         Stopping X Server...
         Stopping Permit User Sessions...
[  OK  ] Stopped Permit User Sessions.
[  OK  ] Stopped target Remote File Systems.
[  OK  ] Stopped X Server.
[  OK  ] Stopped D-Bus System Message Bus.
         Stopping System Logging Service...
[  OK  ] Stopped System Logging Service.
[  OK  ] Stopped target Basic System.
[  OK  ] Stopped target Sockets.
[  OK  ] Closed dropbear.socket.
[  OK  ] Closed D-Bus System Message Bus Socket.
[  OK  ] Stopped target System Initialization.
         Stopping Import configuration from SD card...
[  OK  ] Stopped Import configuration from SD card.
         Stopping Load Kernel Modules...
         Stopping Apply Kernel Variables...
[  OK  ] Stopped Apply Kernel Variables.
[  OK  ] Stopped target Local File Systems.
         Unmounting /var...
         Unmounting /tmp...
[  OK  ] Closed Syslog Socket.
[  OK  ] Failed unmounting /var.
[  OK  ] Unmounted /tmp.
[  OK  ] Stopped Load Kernel Modules.
[  OK  ] Reached target Unmount All Filesystems.
[  OK  ] Stopped target Local File Systems (Pre).
         Stopping Remount Root and Kernel File Systems...
[  OK  ] Stopped Remount Root and Kernel File Systems.
[  OK  ] Reached target Shutdown.
[   52.340000] omap_wdt: Unexpected close, not stopping!
Sending SIGTERM to remaining processes...
[   52.490000] <46>systemd-journald[335]: Received SIGTERM
Sending SIGKILL to remaining processes...
Unmounting file systems.
Unmounting /sys/fs/fuse/connections.
Unmounting /var.
All filesystems unmounted.
Deactivating swaps.
All swaps deactivated.

UPDATE:

หลังจากการตรวจสอบและแก้ไขข้อบกพร่องบางอย่างฉันค้นพบสาเหตุของการหยุดชะงักของการปิดระบบแม้ว่าฉันจะยังไม่สามารถแก้ไขได้ สิ่งที่เกิดขึ้นคือด้วยเหตุผลบางประการหนึ่งในบริการที่กำหนดเองเริ่มต้นขึ้นก่อนที่การปิดจะเสร็จสมบูรณ์ซึ่งทำให้ขั้นตอนการปิดระบบหยุดทำงาน นั่นคือกรณีหนึ่งของการแขวน การหยุดแบบอื่นก็คือเมื่อการปิดไม่ได้ถูกขัดจังหวะ แต่หยุดในบางจุด ด้วยเหตุผลนี้ก่อนที่จะแก้ไขข้อขัดแย้งทั้งหมดและปัญหาอื่น ๆ ที่อาจเกิดขึ้นทีละครั้งฉันต้องการเปิดใช้งานการเฝ้าระวังฮาร์ดแวร์โดยไม่มีเงื่อนไข ในการทำสิ่งนี้ผ่าน systemd ฉันได้เปิดใช้งานและทดสอบทั้งแบบแยกกันหรือรวมกันแล้ว RuntimeWatchdogSec และ ShutdownWatchdogSec น่าเสียดายที่พวกเขาไม่ได้ช่วย โดยการดูซอร์สโค้ด

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

โซลูชั่นแรกเป็นที่ต้องการ


มันค้างหรือเปล่า? คุณสามารถแบ่งปันกับเราว่าบริการใดบ้างที่เปิดใช้งานบนระบบ มีคนทำเองไหม? คุณสรุปได้อย่างไรว่า systemd ค้าง
MattBianco

@MattBianco ฉันแก้ไขคำถาม มีข้อมูลเพิ่มเติม
มาร์ติน

ทำไมฉันไม่เห็นบรรทัดใด ๆ ที่เหมือนกันระหว่างบันทึกแรกและไฟล์ที่สอง? ฉันสามารถเสนอความช่วยเหลือเพิ่มเติมได้หากฉันเห็นว่าพวกเขาเริ่มแตกต่างกันอย่างไร
BenjiWiebe

@BenjiWiebe คุณพูดถูก ฉันจะแก้ไขคำถามอีกครั้ง
Martin

ลองใช้ journalctl เป็นรูทแล้วมองหาการหมดเวลาข้อผิดพลาดและความผิดพลาดในการพึ่งพาใน systemd journal
harrymc

คำตอบ:


5

ฉันขอแนะนำวิธีแก้ปัญหา: ลองเพิ่ม

  Before=basic.target

ถึง /usr/lib/systemd/system/dbus.service

ฉันรู้สึกประหลาดใจในบันทึกของคุณที่ทำให้ฉันนึกถึงอุบัติเหตุที่ฉันได้อ่านเมื่อไม่นานมานี้ในฟอรัม Arch Linux : ระบบนี้จะหยุดการรีบูต วิธีการแก้ปัญหาได้รับการเสนอดังกล่าวบนพื้นดินที่แขวนจะเกิดจากการบริการบางพยายามที่จะพูดคุยกับ d-bus หลังจากที่หยุด

ดังนั้นโดยการสั่งซื้อก่อนที่พื้นฐานเป้าหมายไม่เพียง แต่เริ่มก่อนที่จะถึงเป้าหมายพื้นฐาน แต่ยังช่วยให้มั่นใจได้ว่ามันจะอยู่รอบ ๆ จนกระทั่งหลังจากที่เป้าหมายพื้นฐานถูกนำมาใช้ในระหว่างการปิดเครื่อง

ในบันทึกที่ไม่แข็งแรงของคุณเราเห็นว่าระบบพื้นฐานไม่ได้หยุดทำงานในขณะที่มันถูกหยุดอย่างถูกต้องในบันทึกสุขภาพ

หากสิ่งนี้ใช้งานไม่ได้และเมื่อพิจารณาว่าคุณไม่สามารถอัปเกรดคุณได้พิจารณาปรับลดรุ่นหรือไม่


1
ขอบคุณฉันจะลองวิธีแก้ปัญหาของคุณ ฉันได้พิจารณาการเปลี่ยนเป็น SysV ตัวเก่าที่ดีเนื่องจาก systemd ดูเหมือนว่าจะบั๊กโดยการออกแบบ
Martin

ฉันได้รับมันจาก systemd ตอนบูตหลังจากใช้การเปลี่ยนแปลงนั้น: พบวงจรการสั่งซื้อให้ข้ามบัสข้อความระบบ D-Bus ความคิดใด ๆ
Martin

@ มาร์ติน 1: คุณมี / และ / usr บนพาร์ติชันแยกกันหรือไม่? 2) คุณมีสิ่งของมากมายใน /etc/init.d หรือไม่ หรือใน / etc / rc.d?
MariusMatutiae

1
นี้ทำงานได้ดีบน Ubuntu 16.04 ไฟล์ที่อยู่ใน/usr/lib/systemd/user/dbus.serviceภายใต้[Unit]ส่วน
อันวาร์

3

shutdown.targetขัดแย้งกับหน่วยอื่น ๆ ทั้งหมดโดยค่าเริ่มต้นเพื่อหยุดโดยอัตโนมัติเมื่อกระบวนการปิดเครื่องเริ่มต้นขึ้น วิธีนี้ทำงานในลักษณะอื่นเช่นกัน - หากยูนิตอื่นเริ่มทำงานจะทำให้shutdown.targetหยุดทำงาน ดังนั้นปัญหาคือสิ่งที่ทำให้บางสิ่งบางอย่างเริ่มต้นในระหว่างการปิดระบบซึ่งแทนที่กระบวนการปิด

สิ่งนี้ควรได้รับการแก้ไขใน systemd v198 ซึ่งทำให้การปิดระบบ "ไม่สามารถถูกแทนที่"


ฉันไม่สามารถอัปเกรด :(
Martin

ฉันต้องค้นพบ conflits และแก้ไขพวกเขา
Martin

1

บางทีการสลับยังคงทำงานอยู่เมื่อถึง "การปิดเป้าหมาย"; วิธีแก้ปัญหาของฉันคือการบังคับให้ปิดใช้งานการสลับก่อนรีบูต:

swapoff -a
swapoff /dev/md6

หลังจากนั้นรีบูตก็ดีสำหรับฉันโดยไม่หยุด

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