[RTEX] systemctl stop/start unifi

Bonjour,

J’ai eu besoin de customiser le fichier /var/lib/unifi/system.properties.
J’ai donc du arrêter et redémarrer le contrôleur Unifi à chaque modification du fichier.

J’ai remarqué après coup que les commandes infos "Vu Dernière Fois" ne s’actualisaient plus.
J’ai constaté que le daemon du plugin n’a redémarré automatiquement qu’une seule fois lors du premier stop et qu’il tournait toujours malgré les autres arrêts.

Un redémarrage manuel du daemon a remis tout en place.

[19-08-2021 22:39:36][WARNING] : ctrl.close - Le controleur a envoyé un évènement de fermeture, Arret du démon
Erreur startListening:  Error: connect ECONNREFUSED 192.168.1.5:8443
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1148:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '192.168.1.5',
port: 8443,
config: {
url: 'https://xxxxunifi.xxxxx.fr:8443/',
method: 'get',
headers: {
Accept: 'application/json, text/plain, */*',
'User-Agent': 'axios/0.21.1'
},
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
withCredentials: true,
adapter: [Function: httpAdapter],
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
httpsAgent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: true,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
jar: CookieJar {
rejectPublicSuffixes: true,
enableLooseMode: false,
allowSpecialUseDomain: false,
store: { idx: {} },
prefixSecurity: 'silent',
_cloneSync: [Function (anonymous)],
_importCookiesSync: [Function (anonymous)],
getCookiesSync: [Function (anonymous)],
getCookieStringSync: [Function (anonymous)],
getSetCookieStringsSync: [Function (anonymous)],
removeAllCookiesSync: [Function (anonymous)],
setCookieSync: [Function (anonymous)],
serializeSync: [Function (anonymous)]
},
maxRedirects: 0,
data: undefined,
[Symbol(COOKIEJAR_SUPPORT_LOCAL)]: {
backupOptions: [Object],
jar: [CookieJar],
redirectCount: 5,
cookieHeader: ''
}
},
request: <ref *1> ClientRequest {
_events: [Object: null prototype] {
response: [Function],
error: [Function: handleRequestError]
},
_eventsCount: 2,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: false,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: true,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: 0,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: TLSSocket {
_tlsOptions: [Object],
_secureEstablished: false,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
secureConnecting: true,
_SNICallback: null,
servername: null,
alpnProtocol: null,
authorized: false,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype],
_eventsCount: 11,
connecting: false,
_hadError: true,
_parent: null,
_host: 'xxxxunifi.xxxxx.fr',
_readableState: [ReadableState],
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: false,
_sockname: null,
_pendingData: 'GET / HTTP/1.1
' +
'Accept: application/json, text/plain, */*
' +
'User-Agent: axios/0.21.1
' +
'Host: xxxxunifi.xxxxx.fr:8443
' +
'Connection: keep-alive
' +
'
',
_pendingEncoding: 'latin1',
server: undefined,
_server: null,
ssl: null,
_requestCert: true,
_rejectUnauthorized: false,
parser: null,
_httpMessage: [Circular *1],
[Symbol(res)]: [TLSWrap],
[Symbol(verified)]: false,
[Symbol(pendingSession)]: null,
[Symbol(async_id_symbol)]: 5,
[Symbol(kHandle)]: null,
[Symbol(kSetNoDelay)]: false,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kCapture)]: false,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: [Object]
},
_header: 'GET / HTTP/1.1
' +
'Accept: application/json, text/plain, */*
' +
'User-Agent: axios/0.21.1
' +
'Host: xxxxunifi.xxxxx.fr:8443
' +
'Connection: keep-alive
' +
'
',
_keepAliveTimeout: 0,
_onPendingData: [Function: noopPendingOutput],
agent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: 'https:',
options: [Object],
requests: {},
sockets: [Object],
freeSockets: {},
keepAliveMsecs: 1000,
keepAlive: true,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: 'lifo',
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
socketPath: undefined,
method: 'GET',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
path: '/',
_ended: false,
res: null,
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'xxxxunifi.xxxxx.fr',
protocol: 'https:',
[Symbol(kCapture)]: false,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype] {
accept: [Array],
'user-agent': [Array],
host: [Array]
}
},
response: undefined,
isAxiosError: true,
toJSON: [Function: toJSON]
}
Logout OK
2021-08-19T23:00:13.110+0200 I CONTROL  [main] ***** SERVER RESTARTED *****
2021-08-19T22:57:48.642+0200 I CONTROL  [conn12] shutting down with code:0
2021-08-19T22:55:13.479+0200 I CONTROL  [main] ***** SERVER RESTARTED *****
2021-08-19T22:54:09.015+0200 I CONTROL  [conn15] shutting down with code:0
2021-08-19T22:47:00.734+0200 I CONTROL  [main] ***** SERVER RESTARTED *****
2021-08-19T22:45:38.276+0200 I CONTROL  [conn10] shutting down with code:0
2021-08-19T22:40:26.128+0200 I CONTROL  [main] ***** SERVER RESTARTED *****
2021-08-19T22:39:45.900+0200 I CONTROL  [conn81] shutting down with code:0

[2021-08-20 13:13:18][SCENARIO] name: Système à jour, comment: , state: , result: 1
[2021-08-20 13:13:18][SCENARIO] name: Cron actif, comment: , state: 1, result: OK
[2021-08-20 13:13:18][SCENARIO] name: Scénario actif, comment: , state: 1, result: OK
[2021-08-20 13:13:18][SCENARIO] name: Démarré, comment: , state: 1, result: OK 2021-08-02 10:11:03
[2021-08-20 13:13:18][SCENARIO] name: Date système (dernière heure enregistrée), comment: , state: 1, result: OK 2021-08-20 13:13:18 (2021-08-20 12:21:01)
[2021-08-20 13:13:18][SCENARIO] name: Droits sudo, comment: , state: 1, result: OK
[2021-08-20 13:13:18][SCENARIO] name: Version Jeedom, comment: , state: 1, result: 4.1.24
[2021-08-20 13:13:18][SCENARIO] name: Version PHP, comment: , state: 1, result: 7.3.29-1~deb10u1
[2021-08-20 13:13:18][SCENARIO] name: Apache, comment: , state: 1, result: 12
[2021-08-20 13:13:18][SCENARIO] name: Version OS, comment: , state: 1, result: Linux jeedomxxx 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux[10.10]
[2021-08-20 13:13:18][SCENARIO] name: Version database, comment: , state: 1, result: 10.3.29-MariaDB-0+deb10u1
[2021-08-20 13:13:18][SCENARIO] name: Espace disque libre, comment: , state: 1, result: 62 %
[2021-08-20 13:13:18][SCENARIO] name: Espace disque libre tmp, comment: , state: 1, result: 95 %
[2021-08-20 13:13:18][SCENARIO] name: Mémoire disponible, comment: , state: 1, result: 53 % (Total 1995 Mo)
[2021-08-20 13:13:18][SCENARIO] name: Mémoire suffisante, comment: , state: 1, result: 0
[2021-08-20 13:13:18][SCENARIO] name: Erreur I/O, comment: , state: 1, result: 0
[2021-08-20 13:13:18][SCENARIO] name: Swap disponible, comment: , state: 1, result: 86 % (Total 2046 Mo)
[2021-08-20 13:13:18][SCENARIO] name: Swapiness, comment: , state: 1, result: 60%
[2021-08-20 13:13:18][SCENARIO] name: Charge, comment: , state: 1, result: 0.27 - 0.2 - 0.25
[2021-08-20 13:13:18][SCENARIO] name: Configuration réseau interne, comment: , state: 1, result: OK
[2021-08-20 13:13:18][SCENARIO] name: Configuration réseau externe, comment: , state: 1, result: OK
[2021-08-20 13:13:18][SCENARIO] name: Persistance du cache, comment: , state: 1, result: OK (2021-08-20 13:00:04)
[2021-08-20 13:13:18][SCENARIO] name: Apache private tmp, comment: , state: 0, result: OK
[2021-08-20 13:13:19][SCENARIO] plugin: Unifi Network -> unifi -> stable -> 2021-08-18 01:10:35
[2021-08-20 13:13:19][SCENARIO]                     active -> 1
[2021-08-20 13:13:19][SCENARIO]                     api -> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[2021-08-20 13:13:19][SCENARIO]                     controller_ip -> xxxxunifi.xxxxx.fr
[2021-08-20 13:13:19][SCENARIO]                     controller_password -> **************
[2021-08-20 13:13:19][SCENARIO]                     controller_port ->
[2021-08-20 13:13:19][SCENARIO]                     controller_user -> xxxxxxxxx
[2021-08-20 13:13:19][SCENARIO]                     deamonAutoMode -> 1
[2021-08-20 13:13:19][SCENARIO]                     deamonRestartNumber -> 0
[2021-08-20 13:13:19][SCENARIO]                     DeamonSleepTime -> 4
[2021-08-20 13:13:19][SCENARIO]                     defaultParentObject -> 90
[2021-08-20 13:13:19][SCENARIO]                     ignoreLast_seen -> 0
[2021-08-20 13:13:19][SCENARIO]                     ignoreSatisfaction -> 0
[2021-08-20 13:13:19][SCENARIO]                     ignoreUptime -> 0
[2021-08-20 13:13:19][SCENARIO]                     lastDeamonLaunchTime -> 2021-08-20 06:15:03
[2021-08-20 13:13:19][SCENARIO]                     lastDependancyInstallTime -> 2021-07-16 11:08:04
[2021-08-20 13:13:19][SCENARIO]                     PollingTime -> 30
[2021-08-20 13:13:19][SCENARIO]                     site_id -> xxxxxxxxx

Hello,

comportement normal donc, si le controleur n’envoi pas crtl.close je peux rien faire d’autre.

c’est que le websocket de unifi continuait à répondre…

par contre je vois que tu utilises une url plutot que l’ip, c’est déconseillé évidemment :slight_smile:

Conclusion de ce [RTEX], à ce jour, pour monitorer ce plugin, il ne faut pas se fier au bon fonctionnement de son daemon.

[HS On] Si j’utilise les url depuis bien longtemps , c’est qu’elles ont été crées pour ça et l’informatique sans défi à relever serait bien moins passionnante. [HS Off]

1 « J'aime »

c’est difficile à voir avec le peu de log en effet…

image

le seul endroit dans le démon ou on reçoit « Logout OK » c’est quand le démon recoit un stop venant de jeedom. donc si c’est la dernière ligne de ton log, ca veut dire que jeedom a stoppé le démon.

normalement en mode « info » tu aurais du avoir un « exit » aussi après, mais ton démon devait être en « default »

oui mais tu ajoutes des requêtes inutiles, elles ont été créées pour les humains (taper dans la barre du navigateur), pas les machines (démons).
giphy

1 « J'aime »

C’est sur le LAN donc …

Je suis un humain et j’utilise les alias ce qui me permet de déplacer un service sur une autre machine sans avoir à retaper partout la nouvelle ip.

1 « J'aime »

En supposant que le « Logoff OK » soit toi qui stoppe ton démon pour le relancer, j’ai ajouté un nouvel exit du démon si le startListening retourne une erreur, ca résoudra peut-etre ton problème… (jeedom relancera le démon dans les 5min via son mécanisme intégré). tu peux mettre à jour

1 « J'aime »

Le log est en mode info.

Sur un systemctl stop unifi

[20-08-2021 15:15:39][INFO] : --Demande régulière WLAN et SITE (30sec)--
(node:23262) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
|     property 'httpsAgent' -> object with constructor 'Agent'
|     property 'sockets' -> object with constructor 'Object'
|     ...
|     property 'errored' -> object with constructor 'Object'
--- property 'config' closes the circle
at JSON.stringify (<anonymous>)
at /var/www/html/plugins/unifi/resources/unifiDaemon.js:444:32
at processTicksAndRejections (internal/process/task_queues.js:95:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:23262) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3)
(node:23262) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[20-08-2021 15:15:40][WARNING] : ctrl.close - Le controleur a envoyé un évènement de fermeture, Arret du démon
[20-08-2021 15:15:40][INFO] : Exit

Puis après un systemctl start unifi

[20-08-2021 15:20:09][INFO] : Démarrage démon Unifi...
[20-08-2021 15:20:09][INFO] : Démon prêt et à l'écoute !
[20-08-2021 15:20:09][INFO] : Connexion au controleur Unifi...
[20-08-2021 15:20:09][INFO] : Login au controleur : OK
[20-08-2021 15:20:10][INFO] : Ecoute des évènements du controleur : OK
[20-08-2021 15:20:10][INFO] : Connecté au controleur Unifi !
[20-08-2021 15:20:10][INFO] : --Demande régulière WLAN et SITE (30sec)--

avec la nouvelle version ? alors c’est bon

Oui, j’ai oublié de préciser que c’était la version 2021-08-20 15:10:58.

Le daemon tombe bien.

Bon boulot.

1 « J'aime »

en fait ca dépends un peu de ce que le démon était en train de faire quand tu stoppes le Unifi… donc il peut rester des cas non couverts… à surveiller donc !

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.