Petite correction pour les noms de fichier log avec espace:
public static function chunkLog($_path) {
if (strpos($_path, '.htaccess') !== false) {
return;
}
$maxLineLog = self::getConfig('maxLineLog');
if ($maxLineLog < self::DEFAULT_MAX_LINE) {
$maxLineLog = self::DEFAULT_MAX_LINE;
}
$sudo = system::getCmdSudo();
$ftmp = jeedom::getTmpFolder() .'/log.tmp';
$maxSizeLog = self::getConfig('maxSizeLog', '10');
$path = escapeshellarg($_path);
try {
com_shell::execute("$sudo tail -c {$maxSizeLog}M $path | tail -n $maxLineLog > $ftmp && $sudo cat $ftmp > $path");
} catch (\Exception $e) {
message::add(__CLASS__, "Caught exception in " .__FUNCTION__ ."(): " .$e->getMessage());
} finally {
com_shell::execute("$sudo rm -f $ftmp");
}
}
Comme toi, j’avais mis à jour en 4.5.3 hier mais en oubliant la correction de chunkLog()
Résultat:
Une 20aine de lignes dans cron_execution
sh: 1: sudo: Argument list too long
et des fichiers supprimés mais encore utilisés
[2026-04-13 10:17:46][SCENARIO] LSOF:
[2026-04-13 10:17:46][SCENARIO] 588.44 MB /usr/bin/node
[2026-04-13 10:17:46][SCENARIO] 187.76 MB /var/www/html/log/mqtt2d
[2026-04-13 10:17:46][SCENARIO] 47.37 MB /var/www/html/log/jMQTTd
Pour /usr/bin/node c’est normal. J’avais fait aussi un apt upgrade qui a MAJ node. Ca sera résolu au prochain reboot ou à l’arrêt des daemons node.
Pour les 2 logs de daemon, vu leur taille, la fin du tronquage des fichiers ne doit pas dater d’hier. Le pb semble subsister. J’ai mis en surveillance la création des lsof dans le scénario qui surveille les logs.
Bloc code surveillance lsof:
// liste des fichiers ouverts et supprimés
$cmd = 'sudo lsof -nP 2>/dev/null | grep deleted | awk \'{size[$(NF-1)]+=$7} END {for (file in size) printf "%.2f MB\t%s\n", size[file]/(1024*1024), file}\' | sort -rh';
exec($cmd, $output, $retval);
if(count($output)) {
$scenario->setLog("LSOF:");
foreach($output as $l) {
$size = floatval($l);
if ($size > 10)
$scenario->setLog("$l");
}
}