Você pode usar rtcwake
e shutdown
para fazer isso.
rtcwake
é um utilitário para suspender o computador e ativá-lo após um determinado período de tempo. O uso básico é
rtcwake -m <mode> -s <seconds>
Por exemplo
rtcwake -m mem -s 60
suspenderá o computador para ser ativado e será ativado após 60 segundos. É possível escrever scripts para invocar as ações desejadas em sequência, por exemplo:
#!/bin/sh
# calculate seconds remaining until $1
seconds_until() {
current_time='date +%s'
target_time='date -d $1 +%s'
seconds='expr $target_time - $current_time'
# wrap seconds
[ $seconds -lt 0 ] && seconds='perl -e "print $seconds+86400"'
echo $seconds
}
# suspend and wake up at 13:00
rtcwake -m mem -s 'seconds_until 13:00'
# wait until 17:00, suspend, and wake up at 18:00
sleep 'seconds_until 17:00'
rtcwake -m mem -s 'seconds_until 18:00'
# wait until 20:00 and shutdown
sleep 'seconds_until 20:00'
shutdown -h now
O privilégio de raiz é necessário para usar rtcwake
.