시스템 호출로 인해 보류 중인 작업을 정상적으로 종료합니다.

시스템 호출로 인해 보류 중인 작업을 정상적으로 종료합니다.

어제 시스템을 일시 중지했을 때 작업이 종료되지 않았으며 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-suspens.service(및 기타 언급된 장치)는 /lib/systemd/system-sleep/...이 디렉터리의 모든 실행 파일에 있는 모든 실행 파일을 실행합니다. 실행 파일은 모두 병렬로 실행됩니다. 모든 실행 파일이 완료될 때까지 작업이 계속되지 않습니다.

그래서 검사를 해보니 그 안에 제가 최근에 설치한 스크립트가 /lib/systemd/system-sleep포함되어 있다는 것을 알게 되었습니다 . tlp다음을 사용하여 tlp 및 관련 패키지를 제거했습니다.

sudo apt --purge remove tlp tlpui tlp-rdw

문제가 완전히 사라집니다.

관련 정보