Résolu le 8-02-25 mon CRON s'est réveillé alors que je dormais ...

Postez ici toutes vos demandes d’assistance générale concernant le fonctionnement de Linux Mint, qui n'entrent pas dans les autres rubriques.
Répondre
Avatar du membre
tioker
modérateur
Messages : 1191
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

mon CRON s'est réveillé alors que je dormais ...

Message par tioker »

Bonjour

Tout est dans le titre mais j'avoue, je peux préciser.

Soit un job J que je ne dois exécuter qu'une seule fois par jour. Pour ne pas oublier je le mets dans le crontab de mon PC.
Mais je ne suis pas au boulot (je suis retraité); ainsi mon PC je l'utilise à des moments de ma convenance, c'est à dire n'importe quand. Et entre les deux, je rabats l'écran et il se met en veille.
J'avais mis le job J à 5h05 du matin (j'aurais pu le mettre n'importe quand) en pensant que si l'heure était dépassée le crontab essayerait de rattraper le temps perdu. Que nenni.
En fait je m'étais inspiré d'un crontab toutes les heures qui lui, si on est en retard, il lance le job.

Détails techniques: crontab

Code : Tout sélectionner

#-------------- Sauvegarde du répertoire du Rasopberry
5 5 * * * bash /home/patrick/Documents/Programmes/dailyBackup.sh
5 8-22 * * * bash /home/patrick/Documents/Programmes/dailyBackup.sh
Et résultat

Code : Tout sélectionner

2025-01-16T09:05:01.182517+01:00 HP-Victus patrick: /home/patrick/Documents/Programmes/dailyBackup.sh [I] Nothing to do
2025-01-16T10:35:14.737498+01:00 HP-Victus patrick: /home/patrick/Documents/Programmes/dailyBackup.sh [I] Nothing to do
2025-01-16T14:05:01.483734+01:00 HP-Victus patrick: /home/patrick/Documents/Programmes/dailyBackup.sh [I] Nothing to do
2025-01-16T16:04:39.514825+01:00 HP-Victus patrick: /home/patrick/Documents/Programmes/dailyBackup.sh [I] Nothing to do
2025-01-16T16:05:01.533343+01:00 HP-Victus patrick: /home/patrick/Documents/Programmes/dailyBackup.sh [I] Nothing to do
J'explique le résultat. On voit bien que rien ne s'est passé à 5h00. Par contre, par exemple entre 14h10 et 16h04 le PC était en veille, donc rien n'a été lancé. Mais dès que je me suis réveillé, le traitement a été lancé à 16h04 ET 16h05 !

Donc un traitement quotidien qui est en retard ne se relance pas, mais un traitement horaire essaye de rattraper son retard.

Ai-je bien expliqué, et ai-je bien compris ce que j'ai cru comprendre ?

Pour parer mon problème j'utilise dans ma procédure des "logger" et autre "egrep" mais j'aurai préféré faire plus simple.

Une idée ?

PS : pas d'urgence, ça marche, mais c'est pas beau.

Cdlt
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1191
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: mon CRON s'est réveillé alors que je dormais ...

Message par tioker »

cyrille a écrit : jeu. 16 janv. 2025 19:36 Salut Tioker, dans ce cas il faut utiliser anacron et non cron ;)
https://debian-handbook.info/browse/fr- ... acron.html
Je ne connaissais pas.
Je regarde.
Merci
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1191
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: mon CRON s'est réveillé alors que je dormais ...

Message par tioker »

cyrille a écrit : jeu. 16 janv. 2025 20:34 C'est cron mais pour les tâches asynchrones ;)
BS
Je lance cette nuit, je regarde demain dans la matinée... Quand le coq m'aura réveillé.
BN
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1191
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: mon CRON s'est réveillé alors que je dormais ...

Message par tioker »

Or donc...

Dès que j'ai soulevé le capot de mon PC ce matin, l'anacron a fait son travail: lancer les tâches journalières.
Donc il a fait son travail tel qu'il l'avait promis.
Par contre, comme écrit dans la documentation, les travaux lancés le sont sous root. Donc qui peut faire le plus peut faire le moins mais l'environnement utilisateur n'est pas porté, les fichiers de configurations utilisateurs ne sont pas utilisés; il faut en tenir compte.
Ayant été (y'a longtemps) spécialiste des ordonnanceurs, il est vrai que le crontab offre plus de possibilité. Mais bon.
Je creuse encore un peu et je mets à Résolu dès que je pense avoir fait le tour.

Merci (mention spéciale à Cyrille).

Pour ceux que ça intéresserait, je mets le bout de code bash qui me permettait de lancer un job cron en hourly mais en ne le faisant s'exécuter qu'une fois par jour.
Principe:
- j'écris dans le syslog, ce qui me permet de voir si je suis déjà passé aujourd'hui.
- les grep -E (ou egrep) permettent de faire des grep inclusifs (avec ET)
- $? est le status booléen retour de commande, $0 le programme lancé (ou le lanceur) et le $USEUR le lanceur. Le $0 me permet donc de savoir si la commande a déjà été lancée dans le journée.
- si on voulait savoir si le programme est lancé dans le mois, l'heure ... il suffit de modifier les arguments de la commande date
- attention, le cron écrit lui aussi dans le syslog. Il faut donc distinguer la commande lancée en ajoutant ":" après $USER pour le différencier
- enfin ce bout de code est encore en test, je le livre ici car mon but était qu'il soit portable au maximum.

Code : Tout sélectionner

grep -E  $0 /var/log/syslog | grep -E "$(date +%Y-%m-%d)" | grep -E $USER: >> /dev/null
if [[ $? == 0 ]]
then
	logger -p user.info $0 [I] Nothing to do
	exit
fi

# on trace puis on lancera la commande
logger -p user.info "$0 [I] Start"
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Avatar du membre
tioker
modérateur
Messages : 1191
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: mon CRON s'est réveillé alors que je dormais ...

Message par tioker »

Bonsoir
J'ai écrit ma routine de contrôle de passage dans l'heure/la_journée/le_mois.
Je garde donc mon crontab car plus complet (surtout pour le fait que le cron soit spécifique à un utilisateur).
Mais je sais maintenant qu'anacron existe.
Je laisse en surveillance quelques jours et je mettrai à Résolu.
Merci
ImageDistrib : Linux Mint 22.3 Desktop : X-Cinnamon 6.6.7
Kernel : 6.8.0-110-generic CPU : AMD Ryzen 5 5600H with Radeon Graphics RAM : 14Gi
CG : NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
Répondre