Homebridge stürzt kurz nach dem Start ab: „EISDIR: illegal operation on a directory, read“

Gestern kam meine Homebridge-Installation nach Anpassungen an der Konfiguration und der Umwandlung in ein systemd Service nicht mehr richtig hoch — gefühlt 30–60 Sekunden nach dem Start verschwand der Prozess.

Indem man Homebridge mit dem Debug-Parameter (-D, oder --debug) von der Kommandozeile manuell startet …

$ homebridge -D -U /var/lib/homebridge

… erkennt man kurz vor dem Ende der Ausführung folgenden Log-Event:

Got SIGTERM, shutting down Homebridge...

systemd meldet, dass der Prozess sich mit Exit Code 143 verabschiedet hat.

Scrollt man hoch, sieht man (bei mir) Warnungen von Plugins, und eine echte Fehlermeldung:

Error: EISDIR: illegal operation on a directory, read
at Object.readSync (node:fs:748:3)
at tryReadSync (node:fs:448:20)
at Object.readFileSync (node:fs:494:19)
at LocalStorage.parseDirSync (/usr/local/apps/homebridge/node_modules/node-persist/src/local-storage.js:637:35)
at LocalStorage.parseDataDirSync (/usr/local/apps/homebridge/node_modules/node-persist/src/local-storage.js:572:21)
at LocalStorage.initSync (/usr/local/apps/homebridge/node_modules/node-persist/src/local-storage.js:145:14)
at HAPStorage.storage (/usr/local/apps/homebridge/node_modules/hap-nodejs/src/lib/model/HAPStorage.ts:25:25)
at Function.HAPStorage.storage (/usr/local/apps/homebridge/node_modules/hap-nodejs/src/lib/model/HAPStorage.ts:13:26)
at Function.AccessoryInfo.load (/usr/local/apps/homebridge/node_modules/hap-nodejs/src/lib/model/AccessoryInfo.ts:272:30)
at Bridge. (/usr/local/apps/homebridge/node_modules/hap-nodejs/src/lib/Accessory.ts:1160:41)
at step (/usr/local/apps/homebridge/node_modules/tslib/tslib.js:144:27)
at Object.next (/usr/local/apps/homebridge/node_modules/tslib/tslib.js:125:57)
at /usr/local/apps/homebridge/node_modules/tslib/tslib.js:118:75
at new Promise ()
at __awaiter (/usr/local/apps/homebridge/node_modules/tslib/tslib.js:114:16)
at Bridge.Accessory.publish (/usr/local/apps/homebridge/node_modules/hap-nodejs/dist/lib/Accessory.js:928:38)

Zuerst ignorierte ich diesen Eintrag, weil ich mir nicht vorstellen konnte, dass eine „illegal operation on a directory“ die Anwendung zum Absturz bringen kann. Ich hatte mich getäuscht: Wie in Error: EISDIR: illegal operation on a directory, read beschrieben stürzt Homebridge tatsächlich ab, wenn sich im Ordner persist ein Unterordner befindet. Dies war bei mir der Fall, weil mein Installationsscript einen cp Befehl nicht korrekt ausführte.

Nachdem ich den Ordner gelöscht hatte, startete Homebridge wieder problemlos.