EPERM на appendFile на сетевом диске

Приложение должно хранить данные журнала на сетевом диске. Когда диск размещен под Windows, все в порядке. Когда диск размещен под Mac, чтение/запись в порядке, но append получает EPERM, поэтому журнал не работает вообще. Код довольно тривиальный

fs.appendFileSync('xxx.txt', 'zzzzzzzz');

Как правильно добавить данные? Файл обычно слишком большой для загрузки в память.

Обновление: чтение-запись-удаление-создание - это нормально! Открывается только открытие с добавлением

Ответы

Ответ 1

Я бы пошел с Люком Гендриксом. EPERM возникает, когда у вас недостаточно прав для файла/папки. Протестируйте следующие

Код:

 fs.chmod('xxx.txt', 777, function(err){
  if(err){
   console.log(err);
   return;
  }
  fs.appendFileSync('xxx.txt', 'zzzzzzzz');
});

Ссылка

https://nodejs.org/api/fs.html#fs_fs_chmodsync_path_mode https://nodejs.org/api/fs.html#fs_fs_appendfilesync_file_data_options

Надеюсь, что это поможет.

Ответ 2

Может быть, файл используется каким-то другим процессом? (Таким образом, доступ/операция запрещена)

Ответ 3

EPERM означает Error - PERMission: nodejs не разрешено записывать в файл журнала. Проверьте, имеет ли приложение доступ к файлу журнала и изменит его, чтобы приложение node могло записывать в файл журнала.

На mac вы можете сделать chmod 777 somefile.log (обратите внимание, что это позволяет любому, у кого есть доступ к вашей файловой системе, записывать в файл журнала).

Возможно, сервер Windows создал файл журнала, и серверу Mac не разрешен доступ к нему (поскольку он не является владельцем, а разрешение на запись не является общедоступным).