service啟動失敗問題排查

2021-09-23 20:21:14 字數 3569 閱讀 4411

我的電腦在啟動時總會提示「failed to start load kernel modules":

雖然不影響使用,可強迫症看了還是會覺得難受。所以,還是著手解決下,順便總結下linux下service啟動失敗時一般的排查方法。

首先,檢視哪些服務啟動失敗:

$ systemctl --failed

unit load active sub description

● systemd-modules-load.service loaded failed failed load kernel modules

或者可以列印出錯的日誌:

$ journalctl -fp err
可以發現systemd-modules-load出了問題,可以檢視它的狀態:

$ systemctl status systemd-modules-load.service

● systemd-modules-load.service - load kernel modules

loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static)

active: failed (result: exit-code) since ; 6min ago

docs: man:systemd-modules-load.service(8)

man:modules-load.d(5)

process: 684 execstart=/usr/lib/systemd/systemd-modules-load (code=exited, status=no-zero)

main pid: 684 (code=exited, status=1/failure)

hp systemd[1]: starting load kernel modules...

去掉了日期時間,下同。

如果沒有列出process id,可以重啟下服務,就可以看到process id了。比如說,本例中process id就是684。

$ journalctl _pid=20373

-- reboot --

hp systemd-modules-load[684]: failed to find module 'vfs_monitor'

process id是程序號。當然,作業系統可能給別的程序分配這個程序號,程序號前面就是這個程序的名字了。由於我們關心systemd-modules-load,所以注意與之相關的日誌。

除了使用process id進行篩選,還可以直接使用服務名進行篩選:

$ journalctl _systemd_unit=systemd-modules-load.service

hp systemd-modules-load[382]: failed to find module 'vfs_monitor'

-- reboot --

hp systemd-modules-load[456]: failed to find module 'vfs_monitor'

-- reboot --

hp systemd-modules-load[472]: failed to find module 'vfs_monitor'

注意這裡寫的是服務名,所以要帶上.service,對應檢視狀態裡的loaded那一項。

可以發現是由於找不到vfs_monitor這個模組導致的。如果不知道這些日誌篩選方法,也可以直接用-xe選項來檢視,然後肉眼篩選:

$ journalctl -xe
通過一番google,我大致知道了這個和deepin-anything有關。

linux系統載入哪些核心模組,和配置檔案有關係。模組儲存在/lib/modules/下。/etc/modprobe.d/下配置模組載入時的一些引數,也可以利用blacklist來遮蔽模組的自動載入。例如,在安裝nvidia顯示卡驅動時,需要遮蔽開源的nouveau驅動,就可以將其加入blacklist

可以配置啟動時載入哪些核心模組,一般位於/etc/modules-load.d/。比如,對於virtual box虛擬機器:

$ cat /etc/modules-load.d/virtualbox.conf

vboxdrv

vboxnetflt

vboxnetadp

vboxpci

除此之外,還有/usr/lib/modprobe.d/目錄,這個一般是應用程式配置需要載入的模組。例如,vfs_monitor就是deepin-anything配置的需要載入的模組:

$ cat /usr/lib/modules-load.d/anything.conf

vfs_monitor

不過,這個只能在deepin桌面下使用,而我用的xfce4桌面。所以,可以將其禁用:

$ cat /usr/lib/modules-load.d/anything.conf

# vfs_monitor

之後再重啟systemd-modules-load.service,再檢視狀態,終於正常了:

$ systemctl status systemd-modules-load.service

● systemd-modules-load.service - load kernel modules

loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)

active: active (exited) since cst; 1h 15min ago

docs: man:systemd-modules-load.service(8)

man:modules-load.d(5)

process: 20926 execstart=/usr/lib/systemd/systemd-modules-load (code=exited, status=0/success)

main pid: 20926 (code=exited, status=0/success)

最後,archwiki真不錯~

問題排查 服務呼叫失敗

背景 1 中介軟體應用集群cluster a,部署有服務svr a和svr b。2 gateway 3 集群cluster b gateway與cluster b之間通過域進行連線,cluster b將svr c服務export到gateway。svr b為乙個wsl客戶端,svr a呼叫svr b...

安卓開發學習之排查adb啟動失敗的問題

as公升級到3.4後,adb竟然啟動失敗,報錯如下 unable to connect to adb.check the event log for possible issues,verify that your localhost entry2 開啟cmd,先後執行adb kill server...

mysql 啟動出錯問題排查

具體錯誤提示如下 由於出現 1067 這個問題可能是多種原因導致的。這裡我們應該分析 mysql 的日誌資訊,通過日誌來具體分析是什麼原因導致的 1067 這個錯誤。然後在針對性的去網上查詢。出現這個問題後,我們首先要做的是檢視本地mysql的日誌,看看日誌報的什麼錯,根據錯誤資訊再從網上找解決方案...