Démon en gestion auto: pas de redémarrage auto

Salut

Je voudrais que mon démon de mon plugin eufy redémarre automatiquement quand une erreur est détectée.
Il démarre bien en auto mais il ne redémarre pas, je n’arrive pas a comprendre pourquoi.
Quand je détecte une coupure j’appelle deamon_stop(). Par le passé il me semblait que c’était suffisant. Que faut-il faire pour que ca soit le cas?

Voici le code (simplifié) du deamon_info():

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

celui du deamon_stop():

  public static function deamon_stop() {
    $pid_file = jeedom::getTmpFolder(__CLASS__) . '/deamon.pid'; // ne pas modifier
    if (file_exists($pid_file)) {
        $pid = intval(trim(file_get_contents($pid_file)));
        system::kill($pid);
    }
    system::kill('eufyd.py');
// RESETS DIVERS
    while ($i < 5) {
        $deamon_info = self::deamon_info();
        if ($deamon_info['state'] == 'nok')
           break;
        sleep(1);
        $i++;
    }
  }

et un extrait de la log:

0014|[2026-05-25 20:29:50] INFO  Lancement du démon eufyd
0015|[2026-05-25 20:29:50] DEBUG  debian OS version: 12
0016|[2026-05-25 20:29:50] DEBUG  Py executable: /var/www/html/core/class/../../plugins/eufy/resources/python_venv/bin/python3
0017|[2026-05-25 20:29:50] DEBUG  eufy-security-ws schema version: 21
0018|[2026-05-25 20:29:50] DEBUG  [deamon_info] state: nok launchable: ok
0019|[2026-05-25 20:29:50] DEBUG  [handleResult] msg received: {"type":"result","success":true,"result":{"state":{"driver":{"version":"3.8.0","connected":true,"pushConnected":true},"stations":
0020|[2026-05-25 20:29:50] DEBUG  >>> State message received
0021|[2026-05-25 20:29:50] DEBUG  online status: 1
0022|[2026-05-25 20:29:50] INFO  [setDevicesList]
0025|[2026-05-25 20:29:51] DEBUG  [deamon_info] state: ok launchable: ok
0026|[2026-05-25 20:29:54] DEBUG  [refreshDevice]: Base #T8010N232XXXX
<<<< ARRET DU DEMON >>>
0066|[2026-05-25 20:30:07] DEBUG  [handleEvent] msg received: {"source":"driver","event":"push disconnected"}
0067|[2026-05-25 20:30:07] DEBUG  >>> driver message received: push disconnected
0068|[2026-05-25 20:30:07] DEBUG  online status:
0070|[2026-05-25 20:30:07] DEBUG  [deamon_info] state: ok launchable: ok
0071|[2026-05-25 20:30:08] DEBUG  [deamon_info] state: nok launchable: ok

Merci pour votre aide

Hello,

Alors je suis pas très spécialiste de ce coté la du Core mais c’est pas un deamon_start(true) que tu devrais faire ?

Salut @Phpvarious

Moi j’aurais pensé que c’est justement la fonction du redémarrage auto de relancer automatiquement le démon qui se plante?

D’autant plus que je ne peux pas déterminer quand le back-end est à nouveau dispo donc il me faudrait implémenter une logique asynchrone pour ne pas bloquer le plugin…

J’ai raté un truc?

Cela dépend de ce que renvoi le deamon_info quand tu considère que c’est planté, il renvoi bien un nok ?

En faite c’est le cron 5 → plugin::checkDeamon qui normalement lance le deamon_start (plugin.class) si il est bien en auto, launchable et nok

Si tu as des doutes rajoute des log pour débugger.

Salut @Phpvarious et merci pour ta réponse.
Effectivement j’etais parti sur le cron1 je n’avais pas attendu assez longtemps.
Problème réglé merci à toi :wink:

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.