Как я могу hibernate / приостановить из командной строки и сделать это в определенное время

36

Мне удалось узнать, как приостановить / спящий режим системы из командной строки, прочитав Как я могу приостановить / спящий режим из командной строки? ,

Тем не менее, я хотел бы знать, как использовать командную строку для приостановки / гибернации в данный момент времени, в абсолютном (например, 11 вечера) или относительном (например, в течение 30 минут) условиях.

Я уже знаю, как сделать это с выключением, но я уверен, если команда похожа.

Ederico
источник

Ответы:

43

Вы можете использовать atкоманду, чтобы запланировать любое действие, включая выполнение команд, подробно описанных в этом вопросе .

Например, если вы хотите перейти в спящий режим через 30 минут:

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

Или, если вы хотите приостановить в 11:00 вечера:

echo 'pmi action suspend' | at 11pm

Если вам нужно выполнить команду , как root, работать atс , sudoа не сама команда с sudo(так как sudoдолжно выполняться только в интерактивном режиме , если вы не настроили его не спрашивать ваш пароль). Например, эквивалентами вышеприведенных команд с использованием pm-hibernateи pm-suspendявляются:

echo pm-hibernate | sudo at now + 30 min

echo pm-suspend | sudo at 11pm

Элия ​​Каган
источник
Спасибо, что обратили внимание на обе ситуации ... Я отредактировал заголовок, чтобы отразить это. Я изменил свой ответ, чтобы включить обе ситуации сейчас.
cprofitt
Любая идея, как я могу очистить работу?
Хофи
1
@Rexford The atrmкоманды удаляет рабочие места , созданные at.
Элия ​​Каган,
7

Для относительной спецификации (например, «через 30 минут») вы можете просто использовать sleepкоманду, чтобы заставить команду приостановки / гибернации ждать.


Примеры:

Подождите 30 минут, затем приостановите:

sudo sleep 30m; sudo pm-suspend

Подожди 1 час, затем впадаешь в спящий режим:

sudo sleep 1h; sudo pm-hibernate
Eenoku
источник
Мне тоже нравится такой подход.
Хофи
2
Через 1ч pm-hibernateснова хотят пароль для root и приостановки не происходит.
Виталий Зданевич
как насчет входа в систему как root, чтобы избежать запроса пароля?
banan3'14
4

В течение определенного времени повторяется, как выключение компьютеров, в определенное время каждый день. используйте хрон.

crontab -e

добавить следующее:

15 14 1 * * pmi action suspend

Если вы хотите настроить его.

* * * * * 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)

Для единовременной работы нас в команде

Например, если вы хотите перейти в спящий режим через 30 минут:

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

Или, если вы хотите приостановить в 11:00 вечера:

echo 'pmi action suspend' | at 11pm
cprofitt
источник
2
Использование cron- хорошее решение, когда целью является приостановка или переход в спящий режим в определенное время дня или в определенное время в определенный день недели, месяца или года. Но для планирования одиночной приостановки или гибернации, которая, по-видимому, и является тем, о чем спрашивал Эдерико (и которая имеет куда больше смысла для желаний ), atследует использовать команду. (Вы можете запланировать одно событие с cronпомощью редактирования события соответствующего crontab, например, с помощью sedили awk, но это чрезвычайно сложно и не нужно; используйте at.)
Элия ​​Каган,
Не соответствует относительным терминам, запрошенным вопросом, он полезен только для конкретных графиков.
Бруно Перейра
Да, это был пример для «определенного времени», которое было запрошено. «Тем не менее, я хотел бы знать, как использовать командную строку для приостановки / гибернации в данный момент времени, в абсолютном выражении (например, 11 вечера)»
cprofitt
1
Вы отредактировали свой ответ, чтобы добавить информацию о том, как его использовать at, но, к сожалению, вы добавили неверную информацию. <Оператор перенаправляет текст из файла или устройств , указанный в его право на стандартный ввод команды , указанной слева от него . Если вы хотите использовать <вместо |(как в моем ответе ), вам придется создать файл с pmi action suspend(или pmi action hibernate) в качестве его содержимого. Такая сложность делает |лучше здесь.
Элия ​​Каган
Как правило, если у вас есть catкоманда слева от |(например cat foo | bar), вы можете заменить ее <выражением ( bar < foo). Но когда у вас есть echoкоманда слева от a |, это не может быть тривиально заменено <выражением.
Элия ​​Каган