Jak mogę hibernować / zawiesić w wierszu poleceń i zrobić to w określonym czasie

36

Udało mi się dowiedzieć, jak zawiesić / hibernować system z wiersza poleceń, czytając Jak mogę zawiesić / hibernować z wiersza poleceń? .

Chciałbym jednak wiedzieć, jak używać wiersza polecenia do zawieszenia / hibernacji w danym momencie, w wartościach bezwzględnych (przykład 11 wieczorem) lub względnych (przykład 30 minut).

Wiem już, jak to zrobić przy wyłączaniu, ale jestem pewien, że polecenie jest podobne.

Ederico
źródło

Odpowiedzi:

43

Możesz użyć atpolecenia, aby zaplanować dowolne działanie, w tym uruchomienie poleceń opisanych w tym pytaniu .

Na przykład, jeśli chcesz hibernować za 30 minut:

echo 'pmi action hibernate' | at now + 30 min

Lub jeśli chcesz zawiesić o godzinie 23:00:

echo 'pmi action suspend' | at 11pm

Jeśli chcesz uruchomić polecenie as root, uruchom atje sudozamiast z samym poleceniem sudo(ponieważ sudopowinno być uruchamiane tylko interaktywnie, chyba że skonfigurowano go tak, aby nie pytał o hasło). Na przykład, równoważniki wyżej poleceniach pm-hibernatei pm-suspendsą następujące:

echo pm-hibernate | sudo at now + 30 min

echo pm-suspend | sudo at 11pm

Eliah Kagan
źródło
Dziękuję za wyłapanie tych dwóch sytuacji ... Zredagowałem tytuł, aby to odzwierciedlić. Zmodyfikowałem swoją odpowiedź, aby uwzględnić teraz obie sytuacje.
cprofitt,
Masz pomysł, jak mogę usunąć zlecenia?
KhoPhi,
2
@ Rexford atrmPolecenie usuwa zadania utworzone przez at.
Eliah Kagan
9

Dla względnej specyfikacji (np. „Po 30 minutach”) możesz po prostu użyć sleeppolecenia, aby polecenie wstrzymania / hibernacji czekało.


Przykłady:

Poczekaj 30 minut, a następnie zawieś:

sudo sleep 30m; sudo pm-suspend

Poczekaj 1 godzinę, a następnie hibernuj:

sudo sleep 1h; sudo pm-hibernate
Eenoku
źródło
Też podoba mi się to podejście.
KhoPhi,
2
Po 1h pm-hibernatechcę ponownie hasło do roota i zawieszenie nie nastąpi.
Witalij Zdanevich,
co powiesz na zalogowanie się jako root, aby uniknąć pytania o hasło?
banan3'14
4

Dla powtarzających się określonych czasów - jak na przykład wyłączanie komputerów to określona godzina każdego dnia. użyj crona.

crontab -e

dodaj następujące:

15 14 1 * * pmi action suspend

Jeśli chcesz to dostosować.

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Na jeden raz powiedz nam polecenie

Na przykład, jeśli chcesz hibernować za 30 minut:

echo 'pmi action hibernate' | at now + 30 min

Lub jeśli chcesz zawiesić o godzinie 23:00:

echo 'pmi action suspend' | at 11pm
cprofitt
źródło
2
Używanie cronjest dobrym rozwiązaniem, gdy celem jest zawieszenie lub hibernacja o określonej porze dnia lub o określonej godzinie w określonym dniu tygodnia, miesiąca lub roku. Ale do zaplanowania pojedynczego zawieszenia lub hibernacji, które wydaje się być tym, o co Ederico pytał (i co jest o wiele bardziej sensowne, aby chcieć to zrobić), atnależy użyć polecenia. (Możesz zaplanować pojedyncze wydarzenie, cronsedawkat
edytując
Nie pasuje do względnych warunków wymaganych przez pytanie, jest użyteczny tylko dla określonych harmonogramów.
Bruno Pereira,
Tak, to był przykład „określonego czasu”, o który wnioskowano. „Chciałbym jednak wiedzieć, jak używać wiersza polecenia do zawieszenia / hibernacji w danym momencie, bezwzględnie (przykład 11
wieczorem
1
Zredagowałeś swoją odpowiedź, aby dodać informacje o tym, jak korzystać at, ale dodane informacje są niestety nieprawidłowe. <Operator przekierowania tekst z pliku lub urządzenia podanej na jego prawo do standardowego wejścia dla polecenia podanego na jego lewej stronie. Jeśli chcesz użyć <zamiast |(jak w mojej odpowiedzi ), musisz utworzyć plik z pmi action suspend(lub pmi action hibernate) jako jego zawartością. Taka złożoność |poprawia się tutaj.
Eliah Kagan,
Jako ogólną wskazówkę, jeśli masz catpolecenie po lewej stronie |(np. cat foo | bar), Możesz je zastąpić <wyrażeniem ( bar < foo). Ale kiedy masz echopolecenie po lewej stronie |, nie można go w prosty sposób zastąpić <wyrażeniem.
Eliah Kagan