Commande Unix un dimanche sur deux

Dans mon village, les poubelles sont ramassées tous les lundi. Il y a deux type de poubelles : déchets ultimes et déchets recyclables. Les déchets ultimes sont récoltés toutes les semaines ; les déchets recyclables, une semaine sur deux.

La question est : Comment faire un rappel automatique différentié suivant qu’il faut sortir une ou deux poubelles le dimanche soir.

Je suis sous Linux. Il faut utiliser cron. Mais cron, même s’il est très souple, ne permet pas de faire quelque-chose tous les deux dimanches. Il faut donc faire une crontab pour tous les dimanches et faire la distinction dans le script lancé par cron.

 

In my village, garbage cans are collected every Monday. There are two types of bins: final waste and recyclable waste. The final waste is collected every week; the recyclable waste is collected every other week.

The question is: How to make a differentiated automatic reminder depending on whether I have to take out one or two garbage cans on Sunday evening.

I'm on Linux. I have to use cron. But cron, even if it is very flexible, does not allow you to do something every other Sunday. It is therefore necessary to make a crontab for every Sunday and to make the distinction in the script launched by cron.

Translated with www.DeepL.com/Translator

 

La commande date est pleine de ressources parfois insoupçonnées. Savez vous que :

date +%s

vous donne le nombre de secondes écoulées depuis la première seconde de 1970.

Soit ns ce nombre. Si on le divise par 86 400 (nombre de secondes dans une journée) on obtient dans la partie entière, le nombre de jour depuis le 1er janvier 1970 qui était un jeudi.

En retirant 3 on a le nombre de jours depuis un dimanche. Ce nombre est toujours divisible par 7 puisqu’on opère un dimanche. Par contre, il est divisible par 14, un dimanche sur deux. C’est ce qu’il nous faut ! On utilise bc -l pour faire les calculs.

Le script :

#!/bin/sh

# définit les dimanches alternativement en dimanche une poubelle et dimanche 2 poubelles

# ns = nombre de seconde depuis le 01/01/1970 à 0h00:00 (un jeudi)

ns=`date +%s`

export DISPLAY=:0.0

export XAUTHORITY=/home/mic/.Xauthority

# Dans un jour il y a 86400 secondes

# nj nombre de jours = partie entière de ns / 86400

nj=$(echo "scale=0; $ns/86400" | bc -l)

# retirer 3 jours pour partir d'un dimanche: njd = nj -3

njd=$(echo $nj -3 |bc -l)

# si njd modulo 14 = 0 alors dimanche 2 poubelles sinon dimanche une poubelle

j14=$(echo "scale=0 ;$njd % 14" | bc -l)

# echo "j14= $j14"

if test $j14 = 0

then

kolourpaint /home/mic/Images/poubelles2.png

else

kolourpaint /home/mic/Images/poubelles1.png

fi

NB: mic correspond à mon nom d'utilisateur: à adapter bien sûr.

Le rappel se fait en ouvrant une fenêtre Kolourpaint avec un dessin comportant un texte écrit en caractères énormes : inratable !

La ligne crontab :

0 18,21 * * 7 sh /home/mic/mes_bash/un_dimanche_sur_2.sh

Le rappel se fait à 18h puis à 21h au cas où l’ordinateur serait éteint à 18h.

Bien sûr l’adaptation à un mardi sur deux ou un vendredi sur 3 n’est pas bien difficile. Je vous laisse faire…

***** Ⓒ M Guignard *****

 

 

Comments powered by CComment