Грохнул день, чтобы разобраться...
Ошибка не в правах и не в открытых файлах, которые никто не закрыл... Все проще.
\opt\ioroker\node_modules\iobroker.js-controller\lib\objects\objectsInMemServer.js
содержит функцию
function deleteOldBackupFiles() {...},
в которой вот такой кусок кода:
try {
fs.unlink(backupDir + file);
} catch (e) {
log.error(`Cannot delete file "${backupDir + file}: ${JSON.stringify(e)}`);
}
Здесь используется асинхронный unlink без второго параметра и то ли глючит, то ли выплевывает ошибку "по дефолту" - do not know...
Можно поставить вместо него fs.unlinkSync, но я предпочел не портить синхронностью асинхронность
fs.unlink(backupDir + file, function (err) {
if (err) log.error(`Cannot delete file "${backupDir + file}: ${JSON.stringify(err)}`); });
}
Такой унлинк вполне хорошо стирает старые бэкапы без ошибок.
Совершенно аналогичный кусок кода в
\opt\ioroker\node_modules\iobroker.js-controller\lib\states\statesInMemServer.js
(см. ту же функцию)
Кстати, в процессе ковыряния в этом деле выяснилось, что настойки для бэкапов objects und states в opt\iobroker\iobroker-data\iobroker.json не подхватываются сетапом. Разбираться пока некогда.
Я человек в обчестве новый, готов скинуть инфу разрабам, но с немецким совсем плохо и не знаю куда