系統呼叫中掛起的掛起作業的正常關閉

系統呼叫中掛起的掛起作業的正常關閉

當我昨天暫停系統時,作業並沒有終止,systemd-suspend.service從那時起我就有一個作業處於不間斷的睡眠狀態:

# systemctl list-jobs
  JOB UNIT                    TYPE  STATE  
21595 post-resume.target      start waiting
21593 systemd-suspend.service start running
21592 suspend.target          start waiting
21596 post-resume.service     start waiting

# systemctl status systemd-suspend.service
● systemd-suspend.service - Suspend
   Loaded: loaded (/nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/example/systemd/system/systemd-suspend.se>
   Active: activating (start) since Sat 2020-04-04 03:07:36 CEST; 23h ago
     Docs: man:systemd-suspend.service(8)
 Main PID: 16761 (systemd-sleep)
       IP: 0B in, 0B out
    Tasks: 1 (limit: 4915)
   Memory: 1.0M
      CPU: 20ms
   CGroup: /system.slice/systemd-suspend.service
           └─16761 /nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/lib/systemd/systemd-sleep suspend

Apr 04 03:07:36 phlegethon systemd[1]: Starting Suspend...
Apr 04 03:07:36 phlegethon systemd-sleep[16761]: Suspending system...

# ps aux |grep suspend
root     16761  0.0  0.0  10364  2052 ?        Ds   Apr04   0:00 /nix/store/2jspk70lir7jcn1krax8haw2j7486i3a-systemd-243.3/lib/systemd/systemd-sleep suspend

當我嘗試手動觸發掛起時,核心(5.4.14)回答 EBUSY:

# echo mem >/sys/power/state
-bash: echo: write error: Device or resource busy

看起來核心在同步其中一個磁碟時卡住了:

# cat /proc/16761/stack
[<0>] iterate_bdevs+0x98/0x142
[<0>] ksys_sync+0x6e/0xb0
[<0>] ksys_sync_helper+0x13/0x90
[<0>] pm_suspend.cold.8+0x213/0x361
[<0>] state_store+0x80/0xe0
[<0>] kernfs_fop_write+0xc1/0x1a0
[<0>] vfs_write+0xa5/0x1a0
[<0>] ksys_write+0x59/0xd0
[<0>] do_syscall_64+0x4e/0x120
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9

現在在這種狀態下我甚至無法正常關閉機器電源:

# systemctl poweroff
Failed to power off system via logind: There's already a shutdown or sleep operation in progress

那我該怎麼辦?我很想伸手去拿大槍(Sysrq),但我想知道它是否真的有效?sync(1)正如預期的那樣,只是掛起,所以我不願意嘗試。

另外,有沒有辦法查到哪個核心正在等待的磁碟設備?我有點希望它只是一些 USB 設備,沒什麼大不了的。

答案1

我知道這並不能完全回答問題,但也許會有所幫助。
您或其他將閱讀本文的人。

我現在有(或仍然有)類似的問題。掛起作業未完成返回系統並掛起作業。

24913 systemd-suspend.service start running
24912 suspend.target          start waiting

當我嘗試繼續時,我收到了與您相同的訊息。

# systemctl suspend
Failed to suspend system via logind: There's already a shutdown or sleep operation in progress


我的目標是暫停,而不是關閉。這就是我所做的。

# systemctl cancel
# systemctl stop systemd-suspend.service

首先,停止懸掛操作。
其次,導致系統立即掛起。

取消後我嘗試暫停systemctl suspend,但結果又遇到同樣的問題。
醒來後我啟動了服務,系統又暫停了。

希望我現在能夠在沒有此解決方法的情況下暫停。

答案2

我遇到了類似的問題。我花了一天多的時間來尋找我案件的根本原因。幸運的是,這是 Ubuntu 20.04 僅幾週前的安裝,因此它接近全新安裝。

對我來說,登入顯示管理器後,NetworkManager 沒有運行或重新啟動等(與預設值相同),因此我無法存取 WiFi。

我還看到了與上面提到的等效內容:

# systemctl list-jobs
  JOB UNIT                    TYPE  STATE  
21593 systemd-suspend.service start running

使用它systemctl cancel 21593會停止工作並解決問題,這表明這確實是問題所在。

man systemd-sleep發現

在進入系統掛起和/或休眠之前,systemd-suspend.service(以及其他提到的單元)將運行/lib/systemd/system-sleep/ 中的所有可執行檔...此目錄中的所有可執行檔都是並行執行的,並且在所有可執行檔完成之前不會繼續執行該操作。

因此,經過檢查,/lib/systemd/system-sleep我意識到它包含tlp我最近剛安裝的腳本。我使用卸載了 tlp 和關聯的軟體包

sudo apt --purge remove tlp tlpui tlp-rdw

問題就完全消失了。

相關內容