Перейти к содержимому

предотвратить сон в сценариях

11

Есть ли способ предотвратить переход Windows в спящий режим при запуске программы из командной строки или с помощью cygwin? В идеале я надеюсь на что-то, что можно использовать, например:

nosleep myscript.sh 

Фон

Иногда я запускаю длительные задания, такие как ручное резервное копирование или передача больших файлов, и обнаружил, что Windows часто переходит в спящий режим до их завершения. Я хотел бы иметь возможность запустить команду и запретить спящий режим во время выполнения команды, но чтобы она автоматически снова работала после выполнения команды.

17 970 просмотров
Mr Fooz спросил 16 лет назад
M 3 169

4 ответа

14
Принятый ответ

Вы можете использовать powercfgв скрипте, чтобы изменить время ожидания ПК до перехода в спящий режим:

Никогда не переходите в режим ожидания:

powercfg -change -standby-timeout-ac 0 

Перейти в режим ожидания через 15 минут:

powercfg -change -standby-timeout-ac 15 

Благодарю. powercfg плюс немного магии bash - вот что мне нужно.

Mr Fooz · 16 лет назад · 0
harrymc ответил 16 лет назад
H 249 057
7

Вот сценарий bash, который я написал на основании ответа harrymc.

#!/usr/bin/bash  # NAME # nosleep - prevent sleep and hibernation while running a command # # SYNOPSIS # nosleep COMMAND [ARG]...  # Make sure the power scheme gets restored, even if Ctrl-C happens cleanup() { powercfg -setactive $SCHEME_GUID powercfg -delete $TMP_GUID return $? } trap cleanup SIGINT  # Disable sleep and hibernate timers export SCHEME_GUID=`powercfg -getactivescheme | gawk '{ print $4 }'` export TMP_GUID=`powercfg -duplicatescheme $SCHEME_GUID | gawk '{ print $4 }'` if [[ -z $TMP_GUID ]]; then echo "ERROR: could not duplicate the current power scheme" exit 254 fi powercfg -setactive $TMP_GUID powercfg -changename $TMP_GUID nosleep "temporary scheme for disabling sleep and hibernation" powercfg -change -standby-timeout-ac 0 powercfg -change -hibernate-timeout-ac 0  # Run the command "$@"  powercfg -setactive $SCHEME_GUID powercfg -delete $TMP_GUID 

На Cygwin мне пришлось удалить кавычки: от " $ * " до $ *. В противном случае я получил следующее, когда дал более одного аргумента (например, $ nosleep sleep 1: / usr / bin / nosleep: строка 31: команда sleep 1 не найдена

Nippey · 10 лет назад · 0

@Nippey, на самом деле это должно быть " $ @ ". " $ * " неверно, потому что объединяет все аргументы, в то время как $ * неверно, поскольку разделяет аргументы на $ IFS и удаляет пустые.

sch · 9 лет назад · 1
Mr Fooz ответил 16 лет назад
M 3 169
1

Бессонница мешает вашим окнам перейти в спящий режим, но это не инструменты командной строки, поэтому ваш скрипт с командами harrymc - лучшее решение

fluxtendu ответил 16 лет назад
F 6 281
0

Теперь nosleepв Cygwin есть такая команда. Просто установите nosleepпакет и запустите как

nosleep myscript.sh 

Написано Эндрю Шульманом в 2011 году. См. Https://cygwin.com/ml/cygwin/2011-09/msg00151.html.

Источник на Launchpad . Он использует SetThreadExecutionState()(как уже упоминалось, бессонница), не создает отдельную схему питания.

Usage: nosleep [OPTION...] command [args] Run a command while inhibiting computer sleep or hibernation.  -a, --awaymode Force away mode instead of sleep mode -d, --display Keep the display on -i, --ifacpower Following options only apply if AC power is on -?, --help give this help list --usage give a short usage message -V, --version print program version  Report bugs to the Cygwin mailing list <cygwin@cygwin.com>. 

Обратите внимание, что он предотвращает автоматический переход системы в спящий режим, а не переход системы в спящий режим по запросу пользователя (например, при закрытии крышки ноутбука).

sch ответил 9 лет назад
S 232