Mengapa systemd hang saat reboot?

13

1 dari 10 kali, systemd hang saat reboot. Saya tidak mengerti alasannya. Apa / di mana saya harus melihat untuk memperbaiki masalah? Saya menggunakan systemd v196 dan tidak dapat memutakhirkan ke versi> = 198 karena yang terakhir membutuhkan kernel terbaru (dengan dukungan untuk cgroups), yang tidak dapat diperbarui dengan persyaratan pelanggan. Saya bertanya-tanya apakah ada cara yang masuk akal untuk menemukan alasan perilaku ini dan membuat systemd reboot sistem tanpa syarat.

Perhatikan bahwa tautan ini tidak membantu: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

Seperti yang dapat Anda baca di sana:

Shutdown Never Finishes

Jika reboot normal atau poweroff tidak pernah selesai bahkan setelah menunggu beberapa menit, metode di atas untuk membuat log shutdown tidak akan membantu dan log harus diperoleh dengan menggunakan metode lain. Dua opsi yang berguna untuk men-debug masalah boot dapat digunakan juga untuk masalah shutdown:

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

Saya menggunakan konsol serial, dan untuk beberapa alasan saya bahkan dapat login, karena antarmuka et-nya muncul atau telah dinyalakan (setelah pemutusan terjadi selama langkah-langkah reboot).

Saya tidak melihat alasannya.

# 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

Perhatikan swap.target. Itu ada di sana tetapi kami tidak menggunakan partisi swap sama sekali. Saya mencoba untuk menutupi swap, tetapi masalah hang reamins. Baris terakhir di konsol adalah:

[OK] Stopped target shutdown.

EDIT: Seperti yang saya katakan, saya bisa masuk kembali melalui ssh over eth.

Sekarang saya akan menunjukkan dua log. Log pertama terjadi ketika reboot / shutdwon hang, sedangkan log kedua adalah ketika reboot berhasil:

Hang case, hasilnya selalu seperti ini (log lengkap):

[  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>

Reboot normal:

         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.

MEMPERBARUI:

Setelah beberapa penyelidikan dan debug, saya menemukan alasan gangguan shutdown, meskipun saya masih belum bisa menyelesaikannya. Apa yang terjadi adalah karena beberapa alasan salah satu layanan kustom dimulai sebelum shutdown selesai, yang membuat prosedur shutdown hang. Itu salah satu kasus hang. Jenis lain dari hang adalah ketika shutdown tidak terganggu tetapi berhenti di beberapa titik. Untuk alasan ini, sebelum menyelesaikan semua konflik dan kemungkinan lainnya hang satu per satu, saya ingin mengaktifkan pengawas perangkat keras tanpa syarat. Untuk melakukan ini melalui systemd, saya telah mengaktifkan dan menguji, baik secara terpisah atau bersama-sama, RuntimeWatchdogSec dan ShutdownWatchdogSec. Sayangnya, mereka tidak membantu. Dengan melihat kode sumber,

Aku terjebak. Yang saya tanyakan kepada Anda adalah menemukan cara untuk: 1. mengaktifkan pengawas diaktifkan tanpa syarat setidaknya mulai dari titik di mana shutdown dimulai 2. terdeteksi dan menyelesaikan semua konflik dengan cara mudah

Solusi pertama lebih disukai.

Martin
sumber
Apakah itu di jalan turun itu hang? Bisakah Anda berbagi dengan kami layanan apa yang diaktifkan pada sistem? Adakah yang dibuat khusus? Bagaimana Anda menyimpulkan bahwa systemd hang?
MattBianco
@MattBianco Saya mengedit pertanyaan. Ada lebih banyak informasi.
Martin
Mengapa saya tidak melihat garis yang sama antara log pertama dan kedua? Saya dapat menawarkan lebih banyak bantuan jika saya bisa melihat di mana mereka mulai berbeda.
BenjiWiebe
@ BenjiWiebe kamu benar. Saya akan mengedit pertanyaan lagi
Martin
coba gunakan journalctl sebagai root dan cari timeout, kegagalan dan kesalahan ketergantungan dalam jurnal systemd.
harrymc

Jawaban:

5

Saya berani menyarankan solusi: coba tambahkan

  Before=basic.target

ke /usr/lib/systemd/system/dbus.service.

Saya dikejutkan oleh keanehan, dalam log Anda, yang mengingatkan saya pada kecelakaan yang telah saya baca beberapa waktu yang lalu, di forum Arch Linux : sistem ini akan hang on reboot. Solusinya ditawarkan seperti di atas, dengan alasan bahwa hang akan disebabkan oleh beberapa layanan yang mencoba untuk berbicara dengan d-bus setelah dihentikan:

Jadi dengan memesannya sebelum basic.target tidak hanya dimulai sebelum target dasar tercapai, tetapi juga memastikan bahwa ia tetap ada sampai setelah basic.target diturunkan saat shutdown.

Dalam log Anda yang tidak sehat , kami melihat bahwa Sistem Dasar tidak dihentikan, sementara itu dihentikan dengan benar di log yang sehat .

Jika ini tidak berhasil, dan mempertimbangkan bahwa Anda tidak dapat memutakhirkan, sudahkah Anda mempertimbangkan penurunan peringkat?

MariusMatutiae
sumber
1
Terima kasih, saya akan mencoba solusi Anda. Saya telah mempertimbangkan pengganti SysV tua yang baik, karena systemd tampaknya disadap oleh desain.
Martin
Saya mendapatkan ini dari systemd saat boot setelah menerapkan perubahan itu: Siklus pemesanan ditemukan, lewati Bus Pesan Sistem D-Bus. Ada ide?
Martin
@ Martin 1: apakah Anda memiliki / dan / usr di partisi yang terpisah? 2) apakah Anda memiliki banyak hal di /etc/init.d? Atau di /etc/rc.d?
MariusMatutiae
1
ini berfungsi dengan baik di Ubuntu 16.04, file berada di /usr/lib/systemd/user/dbus.servicebawah [Unit]bagian
Anwar
3

shutdown.targetkonflik dengan semua unit lain secara default, untuk menghentikannya secara otomatis ketika proses shutdown dimulai. Ini bekerja sebaliknya juga - jika unit lain mulai, itu menyebabkan shutdown.targetharus dihentikan. Jadi masalahnya adalah sesuatu menyebabkan sesuatu untuk mulai selama shutdown, yang menimpa proses shutdown.

Ini seharusnya diperbaiki di systemd v198, yang membuat pekerjaan shutdown "tak tergantikan".

pengguna1686
sumber
Saya tidak dapat memutakhirkan :(
Martin
Saya harus menemukan conflits dan memperbaikinya
Martin
1

Mungkin swap masih aktif saat mencapai "Target shutdown"; Solusi saya adalah memaksa deaktivasi swap sebelum reboot:

swapoff -a
swapoff /dev/md6

setelah itu, reboot saya baik-baik saja tanpa jeda.

Stéphane Peters
sumber