[Ubuntu] Programmer mise en veille et réveil pour envoi de courriels automatiquement

ubuntu logo32Dans le cadre de mon travail, j'ai eu besoin d'envoyer des courriels le matin à une certaine heure alors que je n'étais pas forcément disponible d'où la recherche de solutions pour le faire.

Il existe une extension pour Thunderbird qui permet d'envoyer des courriels à un moment choisi. Il s'agit de "Envoyer Plus Tard" (Send Later) de Jonathan Kamens :

Le plus simple est de l'installer directement en passant par la gestion de modules dans Thunderbird.

Sauf que... cette extension ne fonctionne pas si l'ordinateur est en veille ET si Thunderbird est fermé !
Il faut donc trouver comment réveiller l'ordinateur à l'heure d'envoi des courriels. Comme d'habitude, il existe une solution pour cela dans GNU/Linux. On va passer par la commande en ligne rtcwake.

AVERTISSEMENT : Ces manipulations ne fonctionnent pas si l'ordinateur est arrêté complètement !!!
De plus, lorsqu'on éteint l'ordinateur la commande rtcwake est effacée. Au redémarrage, il sera nécessaire de la reprogrammer !!! 

Voici des exemples de lignes de commande utiles :

Sourceshttp://man7.org/linux/man-pages/man8/rtcwake.8.html

Il est nécessaire d'être en mode administrateur (root) pour exécuter les commandes. Elles devront donc être toujours précédées de sudo.

Pour mettre son ordi en veille (avec écriture des infos en mémoire sur le disque) et qu'il se réveille 1 minute plus tard, on tapera :

sudo rtcwake -m disk --date +1min

ou

sudo rtcwake -m disk -s 60

Remarques :

Format pour le paramètre --date :

Exemples :

Pour un réveil à 13h42 :

sudo rtcwake -m mem --date 13:42

Vérification 1 :

Il est possible de savoir s'il y a un réveil programmé en tapant la commande :

sudo rtcwake -m show

Vérification 2 :

Il est possible de vérifier si un réveil est programmé en tapant la commande :

cat proc/driver/rtc

On obtient une série d'informations :

rtc_time	: 20:22:45
rtc_date	: 2020-03-28
alrm_time	: 06:30:00
alrm_date	: 2020-03-29
alarm_IRQ	: yes
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: yes
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay

S'il y a "yes" en face de la ligne Alarm_IRQ alors un réveil est programmé.

Utilisation avec cron :

Attention : une tâche cron ne se réalise pas si l'ordinateur est en veille à ce moment-là. Si l'on veut qu'une tâche ratée à cause de la veille soit quand même réalisée lors du réveil de l'ordi, on utlisera la commande anacron.

Pour une utilisation aisée, il faudrait lancer cette commande automatiquement. Il faudrait donc un script ou une tâche cron pour cela...
Comme la commande rtcwake ne peut se faire que via un compte administrateur, il faut éditer le fichier cron de l'utilisateur "root" via la commande :

sudo crontab -e

Ci-dessous, chaque jour à 11h20, on programmera le réveil de l'ordinateur le lendemain à 7h30 et on écrira le résultat de cette commande cron dans un fichier "journal.txt" :

20 11 * * * /usr/sbin/rtcwake -m no -t $(date +\%s -d 'tomorrow 0730') >> /home/thierry/logcron/journal.txt 2>&1

La commande ci-dessous a parfaitement fonctionné avec l'extension Thunderbird "Envoyé plus tard". Mais rappelez-vous que cela suppose que l'ordinateur soit actif à 11h20 tous les jours...