impede o sono em scripts

11

Existe uma maneira de impedir que o Windows entre no modo de suspensão enquanto executa um programa na linha de comando ou com o cygwin? O ideal é que eu esteja esperando algo que possa ser usado como:

nosleep myscript.sh

Plano de fundo

Às vezes, inicio tarefas de longa duração, como um backup manual ou grandes transferências de arquivos, e descobri que o Windows costuma adormecer antes que elas terminem. Gostaria de poder iniciar o comando e impedir o modo de suspensão enquanto o comando estiver em execução, mas faça com que ele funcione novamente automaticamente assim que o comando for concluído.

    
por Mr Fooz 02.01.2010 / 16:39

4 respostas

14

Você pode usar powercfg em um script para alterar o tempo que o computador aguarda até adormecer:

Nunca vá para o modo de espera:

powercfg -change -standby-timeout-ac 0

Vá para o modo de espera em 15 minutos:

powercfg -change -standby-timeout-ac 15
    
por 02.01.2010 / 16:47
7

Aqui está um script que eu preparei com base na resposta da 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
    
por 02.01.2010 / 17:38
1

Insônia impedir que suas janelas para ir dormir mas não é uma ferramenta de linha de comando, então seu script com os comandos harrymc são melhores soluções

    
por 02.01.2010 / 17:41
0

Existe agora um comando nosleep no Cygwin. Basta instalar o pacote nosleep e executar como

nosleep myscript.sh

Escrito por Andrew E. Schulman em 2011. Consulte o link

A fonte no Launchpad . Ele usa SetThreadExecutionState() (como Insônia já mencionado), não cria um esquema de energia separado.

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 <[email protected]>.

Note que ele impede que o sistema automaticamente ative em modo inativo, e não que o sistema entre em suspensão se solicitado por um usuário (como ao fechar uma tampa de laptop).

    
por 13.12.2016 / 15:01