Проблемы с распаковкой файла в Nodejs через дочерний процесс, это дает мне ошибку, однако, когда я запускаю точную команду в дочернем процессе, она работает

#javascript #node.js #linux #node-modules #unzip

Вопрос:

В данный момент у меня есть скрипт, который загружает zip-файл из постоянной ссылки, разархивирует его, удаляет старую версию файла, а затем переименовывает недавно разархивированный каталог.

 exec("unzip recentDatabase.zip", (error, stdout, stderr) => {
    if(error){
      ...
    }
    if (stderr) {
      ...
    }
    ... 
    exec("rm -r recentDatabase ; mv "   DBname   " recentDatabase");
  })
 

по какой-то причине я получаю сообщение об ошибке : «Подпись конца центрального каталога не найдена. Либо этот файл не
является zip-файлом, либо он представляет собой один диск из нескольких частей архива. В
последнем случае центральный каталог и комментарий к zip-файлу будут найдены на
последнем диске(дисках) этого архива.»

Я сделал с помощью этого оператора обратного вызова, чтобы убедиться, что эта команда распаковки запускается только тогда, когда она подтверждает, что загрузка http завершена, и когда я запускаю «распаковать recentDatabase.zip» в терминале он работает отлично, проблемы возникают только тогда, когда я вызываю его из дочернего процесса.

Есть ли что-то, что я делаю не так?

Комментарии:

1. Вы пробовали использовать полный путь к файлу? exec("unzip /where/it/lives/in/the/filesystem/recentDatabase.zip", (error, stdout, stderr) => { ?

2. да, я сделал это, также я думаю, что исправил проблему, обратные вызовы, похоже, не работают с загрузками, он вызывает обратный вызов, как только правильно начинает загрузку, но ничто не уведомляет скрипт о том, что загрузка завершена, я добавил функцию тайм-аута, чтобы убедиться, что загрузка правильно просыпается

3. Приятно слышать; вместо потенциально ненадежного таймера вы рассматривали возможность использования чего-то вроде inotify ? У меня нет node.js опыта, но широко использовали события inotify с других языков.