scanab
Janvier 8, 2026, 4:25
1
Contexte :
Dans cache.class.php la fonction persist() de la classe FileCache fait un tar cfz ' . __DIR__ . '/../../cache.tar.gz * 2>&1 > /dev/null;
Pourquoi c’est problématique ?
Le * est interprété par le shell, pas par tar. Le shell remplace * par tous les fichiers non cachés du répertoire, un par un. Cela peut produire une liste énorme d’arguments, parfois trop grande pour la limite du shell. Pour ma part, avec 22000 fichiers dans mon répertoire cache, mon cache n’était jamais persisté et la page santé de mon jeedom me disait que le cache était en erreur.
Comment corriger ?
Il suffit dans la commande de remplacer le * par un . : tar cfz ' . __DIR__ . '/../../cache.tar.gz . 2>&1 > /dev/null;
Cela permet d’archiver le répertoire courant lui‑même, avec tous ses fichiers et sous‑répertoires, sans dépendre du shell pour l’expansion.
→ comportement identique
→ meilleures performances
→ plus fiable (pas de limite sur le nombre de fichiers, reproductibilité, pas de soucis avec certains noms de fichiers)
2 « J'aime »
Bad
Janvier 8, 2026, 4:52
2
Hello,
Tu peux peut-être proposer un PR :
}
public static function save($_cache){
file_put_contents(jeedom::getTmpFolder('cache').'/'.base64_encode($_cache->getKey()),serialize($_cache));
}
public static function persist() {
$cache_dir = jeedom::getTmpFolder('cache');
try {
$cmd = system::getCmdSudo() . 'rm -rf ' . __DIR__ . '/../../cache.tar.gz;cd ' . $cache_dir . ';';
$cmd .= system::getCmdSudo() . 'tar cfz ' . __DIR__ . '/../../cache.tar.gz * 2>&1 > /dev/null;';
$cmd .= system::getCmdSudo() . 'chmod 774 ' . __DIR__ . '/../../cache.tar.gz;';
$cmd .= system::getCmdSudo() . 'chown ' . system::get('www-uid') . ':' . system::get('www-gid') . ' ' . __DIR__ . '/../../cache.tar.gz;';
$cmd .= system::getCmdSudo() . 'chown -R ' . system::get('www-uid') . ':' . system::get('www-gid') . ' ' . $cache_dir . ';';
$cmd .= system::getCmdSudo() . 'chmod 774 -R ' . $cache_dir . ' 2>&1 > /dev/null';
com_shell::execute($cmd);
} catch (Exception $e) {
}
}
public static function isPersistOk(): bool {
Bad
scanab
Janvier 8, 2026, 5:07
3
Je ne suis pas certain d’avoir fait les choses dans les règles
jeedom:alpha ← scanab:patch-1
opened 04:58PM - 08 Jan 26 UTC
<!--
Please target the `beta` branch when submitting your pull request, unless … your change **only** applies to Jeedom 4.x.
-->
## Description
<!--
What do you want to achieve with this PR? Why did you write this code? What problem does this PR solve?
Describe your changes in detail and, if relevant, explain which choices you have made and why.
-->
Contexte :
Dans cache.class.php la fonction persist() de la classe FileCache fait un tar cfz ' . __DIR__ . '/../../cache.tar.gz * 2>&1 > /dev/null;
Pourquoi c’est problématique ?
Le * est interprété par le shell, pas par tar. Le shell remplace * par tous les fichiers non cachés du répertoire, un par un. Cela peut produire une liste énorme d’arguments, parfois trop grande pour la limite du shell. Pour ma part, avec 22000 fichiers dans mon répertoire cache, mon cache n’était jamais persisté et la page santé de mon jeedom me disait que le cache était en erreur.
Comment corriger ?
Il suffit dans la commande de remplacer le * par un . : tar cfz ' . __DIR__ . '/../../cache.tar.gz . 2>&1 > /dev/null; Cela permet d’archiver le répertoire courant lui‑même, avec tous ses fichiers et sous‑répertoires, sans dépendre du shell pour l’expansion. → comportement identique
→ meilleures performances
→ plus fiable (pas de limite sur le nombre de fichiers, reproductibilité, pas de soucis avec certains noms de fichiers)
### Suggested changelog entry
### Related issues/external references
Fixes #
## Types of changes
- [x] Bug fix _(non-breaking change which fixes)_
- [ ] New feature _(non-breaking change which adds functionality)_
- [ ] Breaking change _(fix or feature that would cause existing functionality to change)_
- [ ] This change is only breaking for integrators, not for external standards or end-users.
- [ ] Documentation improvement
## PR checklist
- [ ] I have checked there is no other PR open for the same change.
- [ ] I have read the [[La ligne directrice pour contribuer à ce projet / Contribution guidelines for this project](.github/CONTRIBUTING.md)).
- [ ] I grant the project the right to include and distribute the code under the GNU.
- [ ] I have added tests to cover my changes.
- [ ] I have verified that the code complies with the projects coding standards.
- [ ] [Required for new sniffs] I have added MD documentation for the sniff.
<!--
============================================================================================
Please make sure your pull request passes all continuous integration checks!
PRs which are failing their CI checks will likely be ignored by the maintainers.
PRs using atomic, descriptive commits are hugely appreciated as it will make
reviewing your changes easier for the maintainers.
============================================================================================
-->
Mips
A scindé ce sujet ()
Janvier 8, 2026, 6:17
4
6 messages ont été scindés en un nouveau sujet : 6 appels de la fonction system::getCmdSudo()
Mips
Janvier 8, 2026, 6:21
5
Il faudra probablement faire la PR sur une autre branche que alpha qui va être, je pense, abandonnée.
ca aurait dû être la branche Release 4.5.2 · jeedom/core · GitHub je crois mais entre temps il y a eu des commits en direct sur master et la branche 4.5.2 est une future 4.5.3 à mon avis donc il y a du nettoyage à faire avant