Gestion exception cron

Bonjour à tous,

J’utilise dans mon plugin la méthode cron30() qui fonctionne très bien.
J’aurais voulu savoir s’il existait une méthode simple pour gérer une exception sur l’exécution de ce cron tous les jours à minuit. J’interroge en effet des serveurs qui doivent être en maintenance à cette heure et cela génère donc des messages d’erreurs.

Merci d’avance

Dedans ton évaluations, tu fait un date() et tu sélections dedans que les heure et minute et ensuite tu dit si différent de 00h30 alors j’exécute la suite.

Cdt
Thibaut
Ps : Il y a peux être plus simple. Je suis pas un pro php

Merci ! C’est ce que j’imaginais faire. Mais peut-être existe t-il une méthode plus simple :slight_smile:
Je débute en php et je ne maîtrise pas encore toutes les subtilités !

Hello,

Tu peux le faire en cron directement en faisant une custom et ne pas utiliser le cron30.
Mais en fait il t’en faut 2 :

Te fait toutes les 30 minutes sauf entre 23h30 et 1h00

*/30 1-23 * * *

Si tu veux uniquement ne pas en avoir entre 23h30 et 00h30 il faut en rajouter une autre

30 0 * * *

Autrement comme dit @Thibaut_T tu gère ca dans ta fonction appelé par le cron30 en définissant dans un tableau par exemple le timestamp de debut de maintenance et de fin de maintenance, du compare le timestamp actuel et si il est entre les 2 TS de maintenance, tu lances rien.

Bonjour,

J’utilise aussi date() dans le cron.
Je ne vois comment faire plus simple.
Pas d’exec à 0h00:

public function cron30() {
    if ( date('G') == 0 && date('i') == 0 ) return;
OU
  if ( date('Gi') == 0 ) return;

Pour une exec toutes les 6 heures:

public function cronHourly() {
    if ( date('G') % 6 == 0 ) {
1 « J'aime »

Merci à tous pour votre aide !
En effet, la fonction Date() est simple et rapide à implémenter. Je vais partir la dessus :wink:

Merci pour la solution.
Pour le test sur les minutes, il vaut mieux faire un test si < 5 plutôt que = 0
Suivant la charge, le cron30 de votre plugin sera peut être lancé à la minute 1

en effet pour plus de sécurité, je ferai un test <5 !
En regardant les mes logs sur les derniers jours, je dépasse rarement le 0:00:15.
Mais chez d’autres personnes qui utilisent mon plugin, ce ne sera peut-être pas le cas :wink:
Merci encore

Oui surtout si un plugin avant le votre a fait un sleep(60) avant de faire une action parce qu’il sait que le serveur auquel il s’adresse ne répond pas à cette heure.
Sur ma Smart, le cron30 des plugins prend 30s.
Le pire est le cronDaily des plugins avec 240s.

1 « J'aime »

Oups… j’ai eu les oreilles qui sifflent !:sleepy:
Mais moi c’est sur le cronHourly… je crois que je vais finir par le faire ce cron dédié toutes les heures +1min…:shushing_face:

Bonjour @agp.com

Avant j’avais fait un test pour vérifier ce que j’écrivais en mettant des messages dans le cronHourly de la classe plugin.

[2020-05-12 14:00:17][ERROR] : Fin Exec cronHourly du plugin : Jpty Vigilance Météo
[2020-05-12 14:00:17][ERROR] : Deb Exec cronHourly du plugin : Suivi CO2
[2020-05-12 14:01:18][ERROR] : Fin Exec cronHourly du plugin : Suivi CO2
[2020-05-12 14:01:18][ERROR] : Deb Exec cronHourly du plugin : wifilightV2
[2020-05-12 14:01:18][ERROR] : Fin Exec cronHourly du plugin : wifilightV2

Le plugin après le votre est retardé d’une minute. A moins d’appeler le votre ZuiviCO2, il gêne les autres plugins.

A votre place je ferais ce que vous faites dans cronHourly dans un cron5 avec un test pour exec uniquement entre la 5ème et la 10ème minute. Ce qui est beaucoup plus simple qu’un cron dédié.
Ça revient à changer

public static function cronHourly() {

en

public static function cron5() {
  $min = date('i');
  if ( $min < 5 && $min >=10 ) return;

Pour le coup faire un truc qui va s’exécuter 11 fois sur 12 pour rien, moi j’aime pas du tout…

Mais ok, je change ce sleep(60) dans la journée, c’est promis !

Avec un temps d’exécution de quelque ms comparé à la construction de la liste des plugins actifs, qui possèdent une méthode cron5 et dont la fonctionnalité cron5 est enable … il y a pire.
AMHA un cron dédié n’est pas nécessaire dans ce cas.

Voir core/class/plugin.class.php

@jpty,

voilà c’est fait, un beau cron dédié qui va tourner toutes les heures + 1 min
Je fais quelques tests sur la beta et je passe ca en stable…

Merci,
Je vais pouvoir décocher « Ne pas mettre à jour »

J’ai trouvé mieux:

public static function cronHourly()
    {

        //   decale de 8 minutes pour eviter les conflits de récupération

        log::add('MiFlora', 'debug', 'lance recuperation des RSSI antennes ');

        sleep (11*60);

        self::make_MiFlora_route();

     }

:smile:

Pas mal en effet ! :sweat_smile:

@Xav-74, désolé d’avoir pollué ton sujet… :zipper_mouth_face:

:stuck_out_tongue_winking_eye: je ne voudrais surtout pas être à l’origine de chamailleries sur ce forum :joy:

D’ailleurs cela m’amène à vous poser une question :
Je travaille actuellement sur une fonction qui va permettre de récupérer des images issues de capteurs des alarmes Verisure. Comme cela passe par le réseau 3G ou 4G entre la base de l’alarme et les serveurs Verisure, cela peut prendre plus d’une minute avant que je reçoive les images, comment procèderiez-vous avant l’affichage ?
Un « while » qui va figer le système pendant toute la durée du process ou un sleep qui laissera accès à Jeedom ?

:wink: Pas de soucis en ce qui me concerne ! @jpty m’avait déjà clairement donné son avis sur cet horrible sleep ! :sleeping:

Excellente question à laquelle je ne me risquerais pas… mais @jpty saura certainement te donner une excellente réponse !

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.