oui je confirme que j’ai desactivé le plugin puis réactivé en mode default
j’ai refait le mode debug et hop par magie ca redemmare
et confirme qu’en desactivant la gestion auto puis arreter et redemmarer meme probleme
sauf que je n’arrive plus à le redeammarer
maintenant je suis bloque sur statut NOK
j’ai redemarrer jeedom refait la meme chose et suis bloque sur nok…
Bad
Août 16, 2022, 1:12
9
Tu peux utiliser la commande suivante pour réparer :
ps ax | grep 'mqtt2d/mqtt2d.js' | grep -v 'sudo\|grep' | cut -d' ' -f1 | sudo tee /tmp/jeedom/mqtt2/deamon.pid
@Loic , (désolé de te tag) le problème vient du fait que Jeedom supprime trop vite le fichier PID de mqtt2 parce que le fichier est encore vide au moment où Jeedom le check.
En fait nodejs crée le fichier et met quelques instants à y écrire le PID, donc Jeedom le supprime…
1 « J'aime »
j’ai lancé la commande mais rien y fait
Bad
Août 16, 2022, 1:14
11
Tu as quoi comme retour à ps ax | grep 'mqtt2d/mqtt2d.js' | grep -v 'sudo\|grep'
Loic
Août 16, 2022, 1:14
12
Bonjour,
Ligne 299 du fichier de class :
while ($i < 10) {
Il faudrait tester avec 30, ca doit dépendre des config chez moi en 2s c’est bon donc 10s c’est large mais ca semble pas etre le cas partout.
Dans tous les cas la beta de demain passe a 30s.
mais si je clique dans le menu à gauche
retour:
11477
1 « J'aime »
lol a ca redemmarer le demon passer en ok
Bad
Août 16, 2022, 1:20
17
En modifiant le deamon_info()
de mqtt2:
public static function deamon_info() {
$return = array();
$return['log'] = __CLASS__;
$return['state'] = 'nok';
$pid_file = jeedom::getTmpFolder(__CLASS__) . '/deamon.pid';
if (file_exists($pid_file)) {
if (@posix_getsid(trim(file_get_contents($pid_file)))) {
log::add(__CLASS__, 'info', 'Démon mqtt2 en fonctionnement');
$return['state'] = 'ok';
} else {
log::add(__CLASS__, 'error', 'Démon mqtt2 HS: $pid_file='.$pid_file.' ; content='.file_get_contents($pid_file).' ; getsid='.posix_getsid(trim(file_get_contents($pid_file))));
shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
}
}
$return['launchable'] = 'ok';
return $return;
}
Pour y ajouter un log si le daemon est OK/NOK et le contenu du fichier PID,
j’ai ce retour dans le log mqtt2
:
0000|[2022-08-16 14:49:18]INFO : Lancement démon mqtt2 : sudo /usr/bin/node /var/www/html/plugins/mqtt2/resources/mqtt2d/mqtt2d.js --loglevel debug --socketport 55035 --mqtt_server mqtt://127.0.0.1:1883 --username --password --callback http://127.0.0.1:80/plugins/mqtt2/core/php/jeeMqtt2.php --apikey KKKKKKK --cycle 0.3 --pid /tmp/jeedom/mqtt2/deamon.pid
0001|[2022-08-16 14:49:19]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0002|[2022-08-16 14:49:19]DEBUG : []
Si je commente la ligne
shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
J’ai ça :
0029|[2022-08-16 14:52:03]DEBUG : Received message without plugin handler : {"test":{"value":1660654322}}
0030|[2022-08-16 14:52:20]INFO : Lancement démon mqtt2 : sudo /usr/bin/node /var/www/html/plugins/mqtt2/resources/mqtt2d/mqtt2d.js --loglevel debug --socketport 55035 --mqtt_server mqtt://127.0.0.1:1883 --username --password --callback http://127.0.0.1:80/plugins/mqtt2/core/php/jeeMqtt2.php --apikey KKKKK --cycle 0.3 --pid /tmp/jeedom/mqtt2/deamon.pid
0031|[2022-08-16 14:52:21]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0032|[2022-08-16 14:52:21]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0033|[2022-08-16 14:52:21]DEBUG : []
...
0049|[2022-08-16 14:52:22]INFO : Démon mqtt2 en fonctionnement
0050|[2022-08-16 14:52:22]INFO : Démon mqtt2 en fonctionnement
0051|[2022-08-16 14:52:26]INFO : Démon mqtt2 en fonctionnement
Donc rallonger le nombre de check n’est pas suffisant je pense.
merci ca refonctionne comme ca donc pour ma part je n’y touche plus
mais ravi d’avoir pu servir la communauté
Bad
Août 16, 2022, 1:26
20
Mon analyse est que Nodejs crée le fichier PID puis écrit (un peu plus tard) le contenu dedans.
Pendant ce temps, Jeedom check le fichier PID, voit qu’il est là, ne trouve pas de PID vivant dedans, supprime le fichier et donc le démon ne démarre pas pour Jeedom.
Je pense qu’il faudrait :
Soit créer le fichier PID sous le nom deamon.pid.tmp
puis le renommer en deamon.pid
dans Nodejs, c’est relativement simple.
Soit verifier si le fichier est utilisé par un autre programme (locked) dans deamon_info()
et ne le check qui s’il n’est pas locked, mais c’est bien plus complexe.
Qu’en dis-tu ?
Loic
Août 16, 2022, 1:41
21
Ok je pense avoir trouvé, normalement ca sera bon demain. En gros si le fichier est vide je ne le supprime pas.
Bad
Août 16, 2022, 1:43
22
En effet, c’est beaucoup mieux que mes propositions
Merci !
je peux donc clôturer le sujet et attendre la version de demain?
Loic
Août 16, 2022, 1:44
24
Normalement oui a tester quand meme car je ne reproduis pas le soucis chez moi
bon alors je propose de laisser ouvert et voir les réactions du modules demain après mise à jour
1 « J'aime »
Bad
Août 16, 2022, 1:50
26
Pour info, j’ai fait mes tests sur Jeedom v4.2.20
En VM dans un NAS Synology avec 2vCPU et 1Go de RAM
load average: 0.31, 0.36, 0.27
Nodejs en 16.16.0
Santé :
2 « J'aime »
avec la mise à jour j’ai juste eu a redémarrer le demon et all ok directement cette fois