Jak mogę dowiedzieć się, dlaczego Zawieszenie czasami kończy się niepowodzeniem?

17

Czasem coś powoduje zawieszenie zawieszenia. Kiedy się zawiesi, system zawiesza się z czarnym ekranem i pozostaje włączony, nie zawieszając się. To sprawia, że ​​muszę przytrzymać przycisk zasilania, aż system się wyłączy.

Jedną różnicą ustawień, którą mam od większości ludzi, jest to, że nie używam opcji, która pozwala ci zawiesić się, gdy pokrywa laptopa jest zamknięta. Dlatego otwieranie i zamykanie pokrywy laptopa nie ma żadnych działań. Lubię naciskać ręcznie wstrzymaj. Czy przyczyną może być ta zmiana preferencji?

Jak mogę zacząć szukać przyczyny awarii, ponieważ awaria nie wyświetla błędów?

Izaak
źródło

Odpowiedzi:

17

Nie sądzę, żeby to ustawienie, o którym wspomniałeś, ma z tym coś wspólnego.

Sprawdź /var/log/pm-suspend.logi zobacz, czy to daje jakąś wskazówkę.

Problemy te są zwykle spowodowane niektórymi procesami zatrzymującymi zawieszenie systemu.

Robić

dmesg -T|grep Freez -A4

i poszukaj tych wpisów:

--
[sun mar  3 15:19:48 2013] Freezing user space processes ... 
[sun mar  3 15:20:08 2013] Freezing of tasks failed after 20.01 seconds (3 tasks refusing to freeze, wq_busy=0):
[sun mar  3 15:20:08 2013] mount.nfs       D e8631aa0     0  5518   5517 0x00800004
[sun mar  3 15:20:08 2013]  e8631b10 00000086 f7bc0e00 e8631aa0 c1053cb4 c1809020 c192ee00 c192ee00
--

Sprawdź znaczniki czasu, aby zobaczyć, który z zgłoszonych problemów dotyczy próby zawieszenia. W takim przypadku mount.nfsprzyczyną są problemy.

Teraz włóż skrypt /etc/pm/sleep.d/, skrypty będą uruchamiane przy zawieszeniu i wznawiane. Nazwa pliku powinna zaczynać się od numeru zamówienia 00-49 dla skryptów użytkownika (więcej szczegółów, patrz man pm-suspend).

Skrypt może wyglądać tak

#!/bin/sh
(killall -9 mount.nfs; exit 0)

z odpowiednimi wpisami dotyczącymi innych procesów, które spowodowały problemy, jeśli takie występują.

Nawias i exit 0jest sztuczką: jeśli proces nie zostanie znaleziony, killallwyjdzie z kodem wyjścia 1, który anuluje całe zawieszenie. Powyższe będzie działać killallw podpowłoce, która zakończy działanie z 0.

Jeśli masz problemy, sprawdź /var/log/pm-suspend.log, czy zarejestrujesz próbę zawieszenia i uruchomienia skryptu.

Carl
źródło
Potrzebowałem także innej linii: (killall -9 mount.nfs; wyjście 0), ponieważ czasami nie działa tylko z SIGUP.
Juanin,
@Juanin: -9jest lepszy, nie wiem, dlaczego miałem tylko -1na pierwszym miejscu, jest teraz edytowany.
Carl
Zastanawiam się, jaki procent czasu problem stanowi połączenie sieciowe na żywo (jak pokazano tutaj). To też był mój problem - ale tak było sshfszamiast nfs.
nobar
Jeśli istnieje więcej niż jedno zadanie odmawiające zamrożenia, może być związane z tym błędem: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1676912
mhellmeier
Czy ta metoda działa również w systemie Ubuntu 18.04 ..?
Ramesh-X