Bonjour à tous,
Je fais face à un problème plutôt critique. Cela fait deux fois que le répertoire /tmp/iCalendar (répertoire de cache) est plein, ce qui a pour effet de planter complètement Jeedom
Mes observations à ce jour:
- j'ai 25 calendriers (serveur owncloud et autre). Je trouve donc 25 fichiers *.tmp.ics dans le repertoire cache
- J'ai la semaine d'activée donc je trouve jusqu'a 6 fichiers *.tmp.json par fichier tmp.ics
Quand les soucis se produisent je me retrouve avec des fichiers *.tmp.json en double, triple,... comme si les anciens n'avaient pas été effacés lors de la regénération.
Fichier tmp.json : iCal(id de la commande)(date - trois moins)(date+6 mois).tmp.json
Les "id de la commande" sont biens dans la base de données.
Lorsque je reboot jeedom le repertoire /tmp est recréé donc on repart à zero et le repertoire est propre.
J'ai mis les logs en mode debug et une alerte quand il y a trop de fichier dans le repertoire. Esperons que je parvienne à capturer la source du problème.
Si vous avez des idées, je suis preneur.
31/3/2017: les json sont générés tous les matins à 00h01min. J'en ai un nouveau tous les jour par commande. Exemple:
-rw-r--r-- 1 www-data www-data 4061 mars 29 00:01 iCal51400-1482966085-1506636085.tmp.json
-rw-r--r-- 1 www-data www-data 4329 mars 30 00:01 iCal51400-1483052487-1506722487.tmp.json
-rw-r--r-- 1 www-data www-data 4329 mars 31 00:01 iCal51400-1483138887-1506808887.tmp.json
Moteur de tache -> Cron Id 1 regenerate all *.json files:
php /var/www/html/core/class/../php/jeeCron.php cron_id=1
Si je lance 2 fois le cron 1 alors:
-rw-r--r-- 1 www-data www-data 2 mars 31 13:02 iCal4309-1483185755-1506855755.tmp.json
-rw-r--r-- 1 www-data www-data 2 mars 31 13:16 iCal4309-1483186573-1506856573.tmp.json
Le nom du fichier est conservé dans la base de donnée dans le champ configuration, par exemple:
{"originalCmdId":"2186","iCalendarUrl":"-","periodeWorking":"6","defaultValue":"","viewStyle":"1day_today","indicDebFin":"1","showHour":"1","showHour24H":"1","periodeView":"6","showLocation":"1","actionIsHistorized":"1","isGoogleCal":false,"icsCalendarName":"","jsonCacheFN":"iCal4035-1483194521-1506864521.tmp.json"}
2/4/2017: Je Pense avoir trouvé le bug.
Il manque juste le traitement d'un cas dans une série de if.
Dans la fonction getEventsInCalendar(), le " if (($_dS <= $_p['dStart'])&&($_p['dEnd']<=$_dE)) {" n'a pas de else.
Je propose un else:
Code : Tout sélectionner
else {
if (!unlink(ICALENDAR_CACHE_PATH.$_fnInCache)) {
log::add('iCalendar', 'debug', '[' .$this->_whatLog.'|'. $this->eqLogic_id . '|' . $this->id . '] BEN cleanCacheFile(): ERROR: '.__('Echec lors de la suppression du fichier', __FILE__) . ': '. $_fnInCache);
} else {
log::add('iCalendar', 'info', '[' .$this->_whatLog.'|'. $this->eqLogic_id . '|' . $this->id . '] BEN cleanCacheFile(): '.__('Fichier supprimé', __FILE__) . ': '. $_fnInCache);
}
}
Résultats de la nuit positifs, pas de doublons dans /tmp/iCalendar ...