Risposte:
Il comando che ti interessa è rtcwake
:
Questo programma viene utilizzato per inserire uno stato di sospensione del sistema fino al tempo di sveglia specificato.
Per trovare la sintassi corretta che funziona per te provare quanto segue:
sudo rtcwake -u -s 60 -m mem
Ciò dovrebbe sospendere il computer per 60 secondi prima del ripristino. Il parametro significativo è mem
Hai diverse opzioni che puoi scegliere: gioca per trovare il valore che funziona meglio per te:
standby
ACPI state S1. This state offers minimal, though real,
power savings, while providing a very low-latency transi‐
tion back to a working system. This is the default mode.
mem ACPI state S3 (Suspend-to-RAM). This state offers signif‐
icant power savings as everything in the system is put
into a low-power state, except for memory, which is
placed in self-refresh mode to retain its contents.
disk ACPI state S4 (Suspend-to-disk). This state offers the
greatest power savings, and can be used even in the
absence of low-level platform support for power manage‐
ment. This state operates similarly to Suspend-to-RAM,
but includes a final step of writing memory contents to
disk.
off ACPI state S5 (Poweroff). This is done by calling
'/sbin/shutdown'. Not officially supported by ACPI, but
usually working.
no Don't suspend. The rtcwake command sets RTC wakeup time
only.
on Don't suspend, but read RTC device until alarm time
appears. This mode is useful for debugging.
Uno script (in fondo a questo post) potrebbe essere usato per sospendere il tuo computer e riattivarlo in un momento specifico:
la sintassi è suspend_until [hh:mm]
per esempio
sudo ./suspend_until 07:30
Salvare lo script come nome suspend_until
e assegnargli i diritti di esecuzione, ad es
chmod +x suspend_until
È possibile creare un processo cron cron che chiama questo script da eseguire in un momento specifico la sera e poi svegliarsi la mattina:
sudo crontab -e
Ora inserisci qualcosa di simile per eseguire lo script di sospensione alle 23:30:
30 23 * * * /home/myhomefolder/suspend_until 07:30
#!/bin/bash
# Auto suspend and wake-up script
#
# Puts the computer on standby and automatically wakes it up at specified time
#
# Written by Romke van der Meulen <redge.online@gmail.com>
# Minor mods fossfreedom for AskUbuntu
#
# Takes a 24hour time HH:MM as its argument
# Example:
# suspend_until 9:30
# suspend_until 18:45
# ------------------------------------------------------
# Argument check
if [ $# -lt 1 ]; then
echo "Usage: suspend_until HH:MM"
exit
fi
# Check whether specified time today or tomorrow
DESIRED=$((`date +%s -d "$1"`))
NOW=$((`date +%s`))
if [ $DESIRED -lt $NOW ]; then
DESIRED=$((`date +%s -d "$1"` + 24*60*60))
fi
# Kill rtcwake if already running
sudo killall rtcwake
# Set RTC wakeup time
# N.B. change "mem" for the suspend option
# find this by "man rtcwake"
sudo rtcwake -l -m mem -t $DESIRED &
# feedback
echo "Suspending..."
# give rtcwake some time to make its stuff
sleep 2
# then suspend
# N.B. dont usually require this bit
#sudo pm-suspend
# Any commands you want to launch after wakeup can be placed here
# Remember: sudo may have expired by now
# Wake up with monitor enabled N.B. change "on" for "off" if
# you want the monitor to be disabled on wake
xset dpms force on
# and a fresh console
clear
echo "Good morning!"
NB
Modifica mem
in questa parte dello script per qualsiasi metodo di sospensione adatto a te:
# Set RTC wakeup time
sudo rtcwake -l -m mem -t $DESIRED &
Potrebbe anche essere necessario sostituire il -u
flag al posto del -l
flag a seconda che l'orologio hardware utilizzi l'ora UTC ( -u
) o locale ( -l
). Nota che l'orologio hardware è diverso dall'orologio di sistema che vedi nel tuo sistema operativo.
credito a redgeonline
Usando rtcwake ho creato un semplice script bash. Usa php per tradurre il linguaggio naturale in tempo di sistema. Per esempio:
sudo ./cu "tomorrow 9am"
sudo ./cu "next monday 3pm"
sudo ./cu "1 hour ago"
rtcwake: time doesn't go backward
#!/bin/bash
export sdate=$1
date=`/usr/bin/php << 'EOF'
<?php
date_default_timezone_set("Etc/GMT-2");
$date = strtotime(GETENV("sdate"));
echo "\r".$date;
EOF`
rtcwake -m mem -t $date
rtcwake
non ha avuto alcun effetto sulla mia macchina. Sulla mia scheda madre Asus, ho dovuto impostare il tempo di veglia nel bios. Ho trovato l'impostazione nel menu Avanzate> APM e ho dovuto usare UTC anche se il mio tempo di bios è impostato sull'ora orientale degli Stati Uniti.