Deamon redémarre toutes les 5 minutes en mode automatique

J’ai mis des log.add dans la fonction deamon_info()

Déjà apparemment elle est lancée toutes les 5 secondes

  public static function deamon_info() {
    log::add(__CLASS__, 'info', 'deamon_info');
    $return = array();
    $return['log'] = __CLASS__;
    $return['state'] = 'nok';
    $pid_file = jeedom::getTmpFolder(__CLASS__) . '/deamon.pid';
    if (file_exists($pid_file)) {
      log::add(__CLASS__, 'info', 'pid_file exist');
      if (@posix_getsid(trim(file_get_contents($pid_file)))) {
        log::add(__CLASS__, 'info', 'posix_getsid');
        $return['state'] = 'ok';
      } else {
        shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
      }
    }
    log::add(__CLASS__, 'info', 'launchable ok');
    $return['launchable'] = 'ok';
    return $return;
  }

On voit bien l’enchainement deamon_info, pid_file exist, posix_getsid et launchable ok à chaque fois mais dès que le deamon restart il manque le pid_file exist et donc le posix_getsid.

C’est donc visiblement ici que j’ai un soucis toutes les 5mn mais pourquoi ?

    $pid_file = jeedom::getTmpFolder(__CLASS__) . '/deamon.pid';
    if (file_exists($pid_file)) {
[2023-08-05 18:04:59]INFO : deamon_info
[2023-08-05 18:04:59]INFO : pid_file exist
[2023-08-05 18:04:59]INFO : posix_getsid
[2023-08-05 18:04:59]INFO : launchable ok
[2023-08-05 18:05:02]INFO : | [Start] Nettoyage des enregistrements de Maison
[2023-08-05 18:05:02]INFO : | Durée de conservation : 1 h
[2023-08-05 18:05:02]INFO : | Suppression de 0 enregistrements
[2023-08-05 18:05:02]INFO : | [End] Nettoyage des enregistrements de Maison
[2023-08-05 18:05:04]INFO : deamon_info
[2023-08-05 18:05:04]INFO : pid_file exist
[2023-08-05 18:05:04]INFO : posix_getsid
[2023-08-05 18:05:04]INFO : launchable ok
[2023-08-05 18:05:04]INFO : deamon_info
[2023-08-05 18:05:04]INFO : pid_file exist
[2023-08-05 18:05:04]INFO : posix_getsid
[2023-08-05 18:05:04]INFO : launchable ok
[2023-08-05 18:05:04]INFO : deamon_info
[2023-08-05 18:05:04]INFO : deamon_info
[2023-08-05 18:05:04]INFO : pid_file exist
[2023-08-05 18:05:04]INFO : pid_file exist
[2023-08-05 18:05:04]INFO : posix_getsid
[2023-08-05 18:05:04]INFO : posix_getsid
[2023-08-05 18:05:04]INFO : launchable ok
[2023-08-05 18:05:04]INFO : launchable ok
[2023-08-05 18:05:05]INFO : deamon_info
[2023-08-05 18:05:05]INFO : pid_file exist
[2023-08-05 18:05:05]INFO : posix_getsid
[2023-08-05 18:05:05]INFO : launchable ok
[2023-08-05 18:05:06]INFO : >> deamon_info <<
[2023-08-05 18:05:06]INFO : >> launchable ok <<
[2023-08-05 18:05:06]ERROR : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
[2023-08-05 18:05:07]INFO : deamon_info
[2023-08-05 18:05:07]INFO : launchable ok
[2023-08-05 18:05:07]INFO : Exécution du démon

On voit aussi plusieurs instances de deamon_info() la meme seconde.

Oui, c’est pas systématique mais en effet, je sais pas pourquoi.

J’ai ajouté des infos sur la partie deamon_start et deamon_stop

[2023-08-05 18:30:08][INFO] : deamon_info
[2023-08-05 18:30:08][INFO] : pid_file : /tmp/jeedom/blitzortung/deamon.pid
[2023-08-05 18:30:08][INFO] : pid_file exist
[2023-08-05 18:30:08][INFO] : launchable ok
[2023-08-05 18:30:08][INFO] : deamon_stop <<<<<
[2023-08-05 18:30:08][INFO] : pid_file : /tmp/jeedom/blitzortung/deamon.pid <<<<<
[2023-08-05 18:30:08][INFO] : kill pid <<<<<
[2023-08-05 18:30:09][INFO] : deamon_info
[2023-08-05 18:30:09][INFO] : pid_file : /tmp/jeedom/blitzortung/deamon.pid
[2023-08-05 18:30:09][INFO] : launchable ok
[2023-08-05 18:30:09][ERROR] : Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement
[2023-08-05 18:30:09][INFO] : deamon_start
[2023-08-05 18:30:09][INFO] : deamon_stop
[2023-08-05 18:30:09][INFO] : pid_file : /tmp/jeedom/blitzortung/deamon.pid
[2023-08-05 18:30:10][INFO] : deamon_info
[2023-08-05 18:30:10][INFO] : pid_file : /tmp/jeedom/blitzortung/deamon.pid
[2023-08-05 18:30:10][INFO] : launchable ok

On voit le lancement d’un deamon_stop() alors que rien ne semble poser problème dans la partie info … c’est donc évidemment pour ça que le prochain deamon_info ne voit plus le pid.

Mais qu’est-ce que c’est que ce binz :slight_smile:

Est-ce que ça pourrait être lié à la gestion des dépendances lors de l’éxécution de checkDeamon par le core ? J’ai un peu de mal à analyser l’ensemble des fonctions de la plugin.class.php

Première fois que j’utilise le package.json …
Si jamais le core veut checker et relancer des dépendances il stop le deamon avant.

Je pense pas avoir fait de boulette, si ?

Quelque chose aurait été corrigé en 4.4 là dessus ?

package.json :

{
  "pre-install": {},
  "apt": {},
  "pip3": {
    "websockets": {}
  },
  "npm": {},
  "yarn": {},
  "plugin": {},
  "post-install": {}
}

Dans info.json j’ai mis ça :

	"hasDependency": false,
	"hasOwnDeamon": true,

Oui cest possible, cest le chemin que javais commencé a suivre, mais je viens de partir a l’apéro :rofl:.
Vu que tu as pas de dépendances, possible quil faille supprimer le fichier package.

Mince dommage pour moi :rofl:

Si j’ai bien une dépendant à installer mais je laisse le core gérer avec package.json qui est dispo depuis la 4.3 je crois.

Est-ce qu’il faut quand même mettre un "hasDependency": true, dans ce cas ? :thinking:

@Loic je serais pas contre une petite analyse si tu as quelques minutes parce que du coup je patauge :slight_smile:

Edit : Je crois que j’ai trouvé … c’était parti en vrille à force et même en manuelle le state était KO
J’ai vu un process python qui tournait, je l’ai kill, redémarré manuellement puis passé en automatique, il tient depuis plus de 5mn … à confirmer !

Bonjour
Je sais pas trop quoi te dire jeedom se base sur le status du démon si nok il le redémarre rien de plus côté core. Ça serait moi je mettrais des logs sur la fonction qui renvoi le status du démon elle doit renvoyer un nok a jn moment.

Bon et bien le coco ne redémarre plus toute les 5mn, je confirme.

Donc du coup il devait y avoir un espèce de conflit entre le port cherché via la fonction getFreePort et celui déclaré coté python. Enfin je suppose.

J’ai remis les choses d’aplomb dans deamon_start() :
$cmd .= ' --socketport ' . config::byKey('socketport', __CLASS__, '56023');

Et j’ai compris au passage pourquoi le deamon n’en avait rien à faire du port passé à ce niveau.

Il y a un soucis dans le fichier proposé avec le plugin template (https://github.com/jeedom/plugin-template/blob/master/resources/demond/demond.py) ici :
image

Il faudrait corriger en :

if args.socketport:
	_socket_port = args.socketport

Et du coup, au passage, la ligne 46 n’est pas bonne non plus (syntax error) :

image

Il faudrait corriger en :

except Exception as e:

J avais deja fait la remarque a @Mips , et il me semblait qu il avait fixé ca dans le template…!?

Suffit de forcer l appel a la fonction pour qu il aille en base et n utilise pas le cache → de memoire 4e argument de la fonction byKey a true

J’ai pas vu ces 3 fonctions dans le plugin template.
Mips les donnes dans la doc qui explique comment mettre en place un plugin à base de deamon.

C etait bien de ca dont je parlais :wink:

Dans le info.json tu dois mettre que tu as des dépendances non?

1 « J'aime »

Je pense : Introduction Jeedom 4.2 : installation de dépendance – Jeedom – Le Blog

Je n’ai pas vu dans les posts de Loic qu’il fallait aussi indiquer qu’il y avait des dépendances, cette info doit justement être pour l’ancienne méthode d’installation des dépendances.

Pour mes plugins où je suis passé par le package.json je l’ai spécifié dans le info.json malgré tout.
Faudrait vérifier le code du core (ou attendre le retour d’un expert de la question)

A ce que je vois hasDependency n’est pas pris en compte pour la méthode packages.json

2 « J'aime »

@Bison ca pourrait peut etre etre interessant que tu ajoutes une log ligne 749 dans ce fichier
Pour voir si le redemarrage de ton demon ne vient pas d une reinstall (auto?) ici

Mais c’est bon, le soucis est réglé :

En revenche se qui me « choc » façon de dire :wink:
, c’est qu’en utilisant packages.json et hasDependency a false, il n’y a plus la tuile Dépendances dans la config du plugin, c’est pourquoi au début vu tes captures je pensai que tu n’avais pas de dépendances

Ah donc ça a quand même un effet de bord => mieux vaut le garder à true pour le moment

1 « J'aime »

Oui j’ai aussi remarqué ça, on ne voit pas qu’il se passe quelque chose …
Du coup vous recommandez de mettre un "hasDependency": true, au moins pour qu’un affichage des dépendances soient affichées ?