rtcwake : Eteindre le système pour une durée définie
Table des matières
rtcwake est un utilitaire qui interagit avec l'horloge temps réel (RTC) de l'ordinateur. Il permet de mettre le système en mode veille (sleep) ou en hibernation (hibernate) ou de l'éteindre (off) et de le réveiller après un certain délai ou à une heure précise.
Par exemple : il sera possible de couper automatiquement une machine la nuit pour la rallumer le matin si les services installés dessus ne sont pas critiques, permettant de ne pas consommer d'électricité et un silence de celle-ci.
Sur la plupart des distributions Linux, rtcwake est inclus dans le paquet util-linux. Ce paquet étant installé par défaut, il n'y a rien à faire.
Pour que rtcwake fonctionne, il faut avoir une horloge RTC.
Par conséquent, cela ne fonctionnera pas :
- Dans une machine virtuelle.
- Sur un Raspberry Pi dans sa configuration de base
Que le système Linux fonctionne avec systemd ou non, peu importe, c'est indépendant du système d'initialisation.
Cet outil travaille avec l'échelle UTC (Temps Universel Coordonné)
Il est nécessaire de disposer des droits super-utilisateur pour interagir avec l'horloge RTC.
Evidemment, une fois le système en veille ou éteint, pour qu'il s'allume de nouveau à l'heure donnée, la machine devra avoir une source d'alimentation (secteur ou batterie).
La syntaxe de base de rtcwake est la suivante :
L'option -m définira le mode d’arrêt du système. Parmi les valeurs possibles :
mem : Veille du système (suspend to RAM) - Etat S3 de l'ACPI
disk : Hibernation du système (suspend to disk) - Etat S4 de l'ACPI
off : Arrêt du système (extinction) - Etat S5 de l'ACPI
no : Ne fait aucune action, juste configure l'heure de réveil
disable : Désactive l'alarme précédemment configurée
show : Affiche les renseignements sur l'alarme
Pour régler l'heure de réveil, trois choix sont possibles :
- l'option -s pour définir le temps en secondes, au bout duquel le réveil sera défini.
OU
- l'option -t pour définir une date et heure exacte de réveil au format timestamp UNIX.
OU
- l'option --date pour définir une date et heure exacte de réveil suivant plusieurs formats
Il est toujours plus intéressant d'apprendre par l'exemple, en voici quelques uns.
Il sera possible de définir une heure de réveil uniquement. Ainsi :
- Si la machine est allumée : Elle reste allumée
- Si la machine est éteinte, ou le système en veille : Elle s'allumera
Cela se fait avec la valeur no à l'option -m :
La console donne l'information :
On pourra, à posteriori consulter l'information avec la valeur show de l'option -m :
La console donne l'information :
Si on veut l'information avec l'heure locale, on a l'option -l qui peut être utile :
La console donne l'information :
Dans le cas d'une alarme définie :
Donnant l'information :
On pourra la désactiver avec :
Il sera possible par exemple de planifier tous les jours à 22h l'extinction de la machine pour 9 heures (32400 secondes).
Une simple entrée dans le planificateur de tâches du système de l'utilisateur root sera suffisante :
Plus d'informations sur le planificateur de tâches dans notre article : https://www.linuxtricks.fr/wiki/cron-et-crontab-le-planificateur-de-taches
rtcwake possède bien d'autres options, telles que l'option -n permettant de simuler le comportement, à des fins de tests sans réaliser les actions.
On retrouvera toutes les options et les informations techniques dans la page de manuel de rtcwake :
Introduction
rtcwake est un utilitaire qui interagit avec l'horloge temps réel (RTC) de l'ordinateur. Il permet de mettre le système en mode veille (sleep) ou en hibernation (hibernate) ou de l'éteindre (off) et de le réveiller après un certain délai ou à une heure précise.
Par exemple : il sera possible de couper automatiquement une machine la nuit pour la rallumer le matin si les services installés dessus ne sont pas critiques, permettant de ne pas consommer d'électricité et un silence de celle-ci.
Prérequis
Sur la plupart des distributions Linux, rtcwake est inclus dans le paquet util-linux. Ce paquet étant installé par défaut, il n'y a rien à faire.
Pour que rtcwake fonctionne, il faut avoir une horloge RTC.
Par conséquent, cela ne fonctionnera pas :
- Dans une machine virtuelle.
- Sur un Raspberry Pi dans sa configuration de base
Que le système Linux fonctionne avec systemd ou non, peu importe, c'est indépendant du système d'initialisation.
Cet outil travaille avec l'échelle UTC (Temps Universel Coordonné)
Il est nécessaire de disposer des droits super-utilisateur pour interagir avec l'horloge RTC.
Evidemment, une fois le système en veille ou éteint, pour qu'il s'allume de nouveau à l'heure donnée, la machine devra avoir une source d'alimentation (secteur ou batterie).
Syntaxe de base
La syntaxe de base de rtcwake est la suivante :
Code BASH :
rtcwake [options] [-d périphérique] [-m mode] {-s secondes|-t heure_h}
L'option -m définira le mode d’arrêt du système. Parmi les valeurs possibles :
mem : Veille du système (suspend to RAM) - Etat S3 de l'ACPI
disk : Hibernation du système (suspend to disk) - Etat S4 de l'ACPI
off : Arrêt du système (extinction) - Etat S5 de l'ACPI
no : Ne fait aucune action, juste configure l'heure de réveil
disable : Désactive l'alarme précédemment configurée
show : Affiche les renseignements sur l'alarme
Pour régler l'heure de réveil, trois choix sont possibles :
- l'option -s pour définir le temps en secondes, au bout duquel le réveil sera défini.
OU
- l'option -t pour définir une date et heure exacte de réveil au format timestamp UNIX.
OU
- l'option --date pour définir une date et heure exacte de réveil suivant plusieurs formats
Exemples
Il est toujours plus intéressant d'apprendre par l'exemple, en voici quelques uns.
Mise en veille pendant 15 secondes :
Le système se met en VEILLE puis se rallume au bout de 15 secondes.
Code BASH :
rtcwake -m mem -s 15
Le système se met en VEILLE puis se rallume au bout de 15 secondes.
Eteindre le système et le rallumer au bout de 30 secondes :
Le système s'ÉTEINT COMPLÈTEMENT puis se rallume au bout de 30 secondes après le lancement de la commande.
Code BASH :
rtcwake -m off -s 30
Le système s'ÉTEINT COMPLÈTEMENT puis se rallume au bout de 30 secondes après le lancement de la commande.
Mise en veille et réveiller à une heure précise :
Récupérer le timestamp de la date et heure de réveil, par exemple pour le 6 septembre à 18h45 :
Le timestamp correspondant est 1725641100
On exécute ensuite la commande rtcwake :
Le système se met en VEILLE puis se rallume à 18h45.
Récupérer le timestamp de la date et heure de réveil, par exemple pour le 6 septembre à 18h45 :
Code BASH :
date -d '2024-09-06 18:45:00' +%s
Le timestamp correspondant est 1725641100
On exécute ensuite la commande rtcwake :
Code BASH :
rtcwake -m mem -t 1725641100
Le système se met en VEILLE puis se rallume à 18h45.
Mise en veille et réveiller à une heure précise via --date :
L'option --date évite les calculs de timestamp dans le cas d'une date fixe par rapport à l'option -t
On exécute ensuite la commande rtcwake :
Le système se met en VEILLE puis se rallume à 07h00.
L'option --date évite les calculs de timestamp dans le cas d'une date fixe par rapport à l'option -t
On exécute ensuite la commande rtcwake :
Code BASH :
rtcwake -m mem --date '2024-07-09 07:00:00'
Le système se met en VEILLE puis se rallume à 07h00.
Mise en veille pendant un temps défini via --date :
L'option --date évite les calculs de secondes par rapport à l'option -s
Le système se met en VEILLE puis se rallume 9 heures plus tard.
L'option --date évite les calculs de secondes par rapport à l'option -s
Code BASH :
rtcwake -m mem --date '+9h'
Le système se met en VEILLE puis se rallume 9 heures plus tard.
Définition de l'heure de réveil uniquement
Il sera possible de définir une heure de réveil uniquement. Ainsi :
- Si la machine est allumée : Elle reste allumée
- Si la machine est éteinte, ou le système en veille : Elle s'allumera
Cela se fait avec la valeur no à l'option -m :
Code BASH :
rtcwake -m no -s 30
La console donne l'information :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC… rtcwake : « wakeup » (réveil) avec /dev/rtc0 à Fri Sep 6 16:50:43 2024
On pourra, à posteriori consulter l'information avec la valeur show de l'option -m :
Code TEXT :
rtcwake -m show
La console donne l'information :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC… alarme : déclenchement Fri Sep 6 16:50:43 2024
Si on veut l'information avec l'heure locale, on a l'option -l qui peut être utile :
Code BASH :
rtcwake -m show -l
La console donne l'information :
Code TEXT :
alarme : déclenchement Fri Sep 6 18:50:43 2024
Désactiver une alarme
Dans le cas d'une alarme définie :
Code BASH :
rtcwake -m show
Donnant l'information :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC… alarme : déclenchement Wed Sep 11 17:14:43 2024
On pourra la désactiver avec :
Code BASH :
rtcwake -m disable
Planification
Il sera possible par exemple de planifier tous les jours à 22h l'extinction de la machine pour 9 heures (32400 secondes).
Une simple entrée dans le planificateur de tâches du système de l'utilisateur root sera suffisante :
Code TEXT :
00 22 * * * rtcwake -m off -s 32400
Plus d'informations sur le planificateur de tâches dans notre article : https://www.linuxtricks.fr/wiki/cron-et-crontab-le-planificateur-de-taches
Plus d'informations
rtcwake possède bien d'autres options, telles que l'option -n permettant de simuler le comportement, à des fins de tests sans réaliser les actions.
On retrouvera toutes les options et les informations techniques dans la page de manuel de rtcwake :
Code BASH :
man rtcwake