Erreur quotidienne dans les logs - Virtual.class.php non trouvé (mais le fichier existe)

Bonjour à tous,

Je rencontre un problème récurrent dans mes logs Jeedom qui apparaît tous les jours exactement à 00:30:02 :

[2026-06-29 00:30:02] ERROR  Archivo no encontrado: /var/www/html/core/php/../../plugins/Virtual/core/class/Virtual.class.php
[2026-06-30 00:30:02] ERROR  Archivo no encontrado: /var/www/html/core/php/../../plugins/Virtual/core/class/Virtual.class.php

Ce que j’ai vérifié :

En me connectant en SSH, j’ai constaté que le fichier existe bien, mais avec un nom en minuscules :

jeedom@jeedom:~$ ls -l /var/www/html/plugins/virtual/core/class/
total 24
-rwxrwxr-x 1 www-data www-data 22090 Dec  2  2025 virtual.class.php

Jeedom cherche Virtual.class.php (avec V majuscule) mais le fichier s’appelle virtual.class.php (tout en minuscules).

Situation actuelle :

  • Le plugin Virtual est bien actif et installé
  • Tous mes équipements virtuels fonctionnent correctement
  • L’erreur n’apparaît qu’une fois par jour à 00:30:02 dans les logs
  • Je n’ai pas encore modifié le nom du fichier

Mes questions :

  1. Est-ce un problème connu ? D’où vient cette incohérence de casse ?

  2. Dois-je renommer le fichier avec la commande suivante pour corriger le problème ?

    sudo mv /var/www/html/plugins/virtual/core/class/virtual.class.php /var/www/html/plugins/virtual/core/class/Virtual.class.php
    
  3. Y a-t-il un risque à laisser les deux fichiers (l’original en minuscules et une copie en majuscules) ?

  4. Cette erreur à 00:30 correspond-elle à une tâche cron spécifique du plugin Virtual ?

JEEDOM: 4.6.1

Virtual: 2025-12-02 09:09:55

Bonjour en donnant les versions du core et du plugin et stable ou beta cela aurait peut être pu être mieux orienté ès le départ comme souci.

Bonjour,
Ca commence à faire plusieurs remontées du même genre si je ne me trompe pas !

https://community.jeedom.com/t/erreur-dans-les-log-jeedom-depuis-la-4-6-si-un-plugin-a-un-nom-avec-des-majuscules/149760/22

JEEDOM: 4.6.1

Virtual: 2025-12-02 09:09:55

Il y a des chances que ça soit lié à des problèmes similaires comme ici https://community.jeedom.com/t/erreur-depuis-mise-a-jour-4-6-0/149695/19 https://community.jeedom.com/t/erreur-dans-les-log-jeedom-depuis-la-4-6-si-un-plugin-a-un-nom-avec-des-majuscules, rien de bloquant, juste un message en erreur qui ne semble pas être critique puisque ça existait avant la 4.6, juste pas loggué.

Bonsoir,

Oui c’est connu, mais toujours en cours d’analyse.

Surtout pas ! tu cassera encore plus le plugin.

Je pense pas, mais l’idée n’est pas de contourner le problème mais bien de l’isoler et de corriger.

Impossible a savoir car c’est l’user qui décide de l’auto-actualisation.


Copie/colle le code ci-dessous dans un bloc code d’un nouveau scénario puis exécute manuellement.

$search = 'Virtual'; // nom a rechercher

////////////////////////////////////////////////////////////////////////////////
/////////////////// NE PAS MODIFIER SAUF SUR DEMANDE ///////////////////////////
////////////////////////////////////////////////////////////////////////////////
$scenario->setLog('┌─────▶︎ Vérification EqType des commandes ───────────────');
$eqLogics = eqLogic::all();
$count = 0;
foreach ($eqLogics as $eqLogic) {
  foreach (($eqLogic->getCmd()) as $cmd) {
    if ($eqLogic->getEqType_name() != $cmd->getEqType()) {
      $count++;
      $scenario->setLog('| ' . $eqLogic->getEqType_name() . ' - ' . $cmd->getHumanName() . ' - ' . $cmd->getEqType());
      //$cmd->setEqType($eqLogic->getEqType_name())->save();
    }
  }
}
if ($count == 0) $scenario->setLog('| [ OK ] Aucun mauvais EqType détecté.');
$scenario->setLog('└───────────────────────────────────────────');
$scenario->setLog('┌─────▶︎ Vérification des blocs code ───────────────');
$count = 0;
$scenarioExpressionId = $this->getId();
$result = scenarioExpression::searchExpression($search, null, false);
foreach ($result as $expr) {
  $expr = utils::o2a($expr);
  if ($expr['id'] == $scenarioExpressionId || $expr['type'] != 'code') continue;
  if (strpos($expr['expression'], $search)) {
    $subElement = scenarioSubElement::byId($expr['scenarioSubElement_id']);
    if (is_object($subElement)) {
      $scenario2 = $subElement->getElement()->getScenario();
      if (is_object($scenario2)) {
        $count++;
        $scenario->setLog('| ' . $scenario2->getHumanName() . ' ─▶︎ Contenu a vérifier manuellement.');
      }
    }
  }
}
if ($count == 0) $scenario->setLog('| [ OK ] Mot ' . $search . ' pas détecté.');
$scenario->setLog('└───────────────────────────────────────────');

Celui-ci permet :

  • de ressortir en log les commandes qui ne portent pas le bon EqType.
  • de remettre le bon EqType si la ligne 14 est décommentée (déconseillé tant que le résultat n’a pas été posté puis analysé).
  • de rechercher le mot dans les bloc code des scénarios. Pour chaque scénario trouvé, il sera nécessaire de vérifier manuellement dans celui-ci l’existence du mot recherché.

Post le résultat dans un bloc préformatté stp.