Généralités système Linux

rtcwake : Eteindre le système pour une durée définie

Table des matières

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

Le format de date peut être de plusieurs formes :
- AAAAMMJJhhmmss
- AAAA-MM-JJ hh:mm:ss
- AAAA-MM-JJ hh:mm (les secondes sont à 0)
- AAAA-MM-JJ (l'heure sera 00:00:00)
- hh:mm:ss (la date sera aujourd'hui - Attention si l'heure est déjà passée aujourd'hui)
- hh:mm (la date sera aujourd'hui et les secondes sont à 0 - Attention si l'heure est déjà passée aujourd'hui)
- +5m (dans 5 minutes)
- +5h (dans 5 heures)
- +5d (dans 5 jours)


Exemples



Il est toujours plus intéressant d'apprendre par l'exemple, en voici quelques uns.

Mise en veille pendant 15 secondes :

Code BASH :
rtcwake -m mem -s 15

Le système se met en VEILLE puis se rallume au bout de 15 secondes.

Au moment de la validation de la commande, il était 18:34:07, j'ai un retour dans la console :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
rtcwake : « wakeup » (réveil) depuis « mem » avec /dev/rtc0 à Fri Sep  6 16:34:23 2024


Eteindre le système et le rallumer au bout de 30 secondes :
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.

Au moment de la validation de la commande, il était 18:36:26, j'ai un retour dans la console :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
rtcwake : « wakeup » (réveil) depuis « off » avec /dev/rtc0 à Fri Sep  6 16:36:57 2024
Broadcast message from root@gentoodell (pts/1) (Fri Sep  6 16:36:26 2024):
The system is going down for system halt NOW!


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 :
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.

Au moment de la validation de la commande, j'ai un retour dans la console :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
rtcwake : « wakeup » (réveil) depuis « mem » avec /dev/rtc0 à Fri Sep  6 16:45:00 2024


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 :
Code BASH :
rtcwake -m mem --date '2024-07-09 07:00:00'

Le système se met en VEILLE puis se rallume à 07h00.

Au moment de la validation de la commande, j'ai un retour dans la console :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
rtcwake : « wakeup » (réveil) depuis « mem » avec /dev/rtc0 à Sat Sep  7 05:00:00 2024
 


Mise en veille pendant un temps défini via --date :

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.

Au moment de la validation de la commande, j'ai un retour dans la console :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
rtcwake : « wakeup » (réveil) depuis « mem » avec /dev/rtc0 à Sat Sep  7 05:00:00 2024
 


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


Si aucune alarme n'est définie (ou que le délai est dépassé et donc l'alarme supprimée) :
Code TEXT :
rtcwake : on considère que l'horloge matérielle utilise l'échelle UTC…
alarme : arrêt


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
Cette page a été vue 7866 fois