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.
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
Je débute en php et je ne maîtrise pas encore toutes les subtilités !
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.
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
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.
Oups… j’ai eu les oreilles qui sifflent !
Mais moi c’est sur le cronHourly… je crois que je vais finir par le faire ce cron dédié toutes les heures +1min…
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;
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.
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();
}
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 ?