2016-12-07 3 views
-1

У меня есть сценарий bash, который я использую на стороне сервера от метеор. Я проверил, что я успешно могу запустить команды оболочки, запустив 'ls' и получив ожидаемый ответ. Однако, когда я запускаю сценарий оболочки, на серверную консоль никогда не выводится вывод, и ни один из предполагаемых эффектов сценария не будет успешным. Я печатаю stderr, stdout и ошибку, но они ничего не печатают при запуске моего скрипта.Проблемы с сервером сервера сценария bash от Meteor

Meteor.methods({ 
     grade: function(unittest, code) { 
      this.unblock(); 

      var sys = Npm.require('sys'); 
      var exec = Npm.require('child_process').exec; 

      // exec('/bin/ls /srv/srcalyzer/scripts', function(error,stdout,stderr){ 
      //  console.log('error: ',error); 
      //  console.log('stdout: ',stdout); 
      //  console.log('stderr: ',stderr); 
      // }); 

      console.log('running grade') 
      exec('/bin/bash /srv/srcalyzer/scripts/grade.sh', function(error,stdout,stderr){ 
       console.log('error: ',error); 
       console.log('stdout: ',stdout); 
       console.log('stderr: ',stderr); 
      }); 
      console.log('just finished.');  
     }, 

Хотя в настоящее время закомментировал/bin/LS/некоторые/путь регистрирует ожидаемый выход на консоль. Однако, когда я запускаю/bin/bash /path/to/.sh, что я знаю, на месте. Консольный вывод выглядит как

I20161207-15:22:07.031(-5)? running grade 
I20161207-15:22:07.045(-5)? just finished. 

Скрипт занимает короткое время (~ 15-20 секунд). Я не уверен, что это важно или нет.

Может кто-нибудь, пожалуйста, помогите мне понять, что происходит?

+0

Моей догадкой является 'grade.sh' никогда не заканчивает работает так, что вы не видите какие-либо журналов в консоли – Khang

+0

@Khang Я дал ему немного посидеть и проверить, было ли это так, я добавил строку в начале скрипта, которая добавила бы строку с текущим временем в файл и никогда не записывала. Это означает, что файл никогда не запускается. –

ответ

0

есть намек здесь:

I20161207-15:22:07.031(-5)? running grade 
I20161207-15:22:07.045(-5)? just finished. 

, который только принимает несколько мс для запуска. значение, ваш метод Метеор, скорее всего, выходит до завершения exec(). я никогда не запускал exec() в Meteor, поэтому я не уверен, что этот сценарий оболочки продолжает работать после выхода вашего метода.

что вам нужно, чтобы запустить будущее в вашем методе Метеор, чтобы он не выходил, пока ваш сценарий оболочки не вернется.

что-то вроде:

let future = new Future(); 

exec('/bin/bash /srv/srcalyzer/scripts/grade.sh', function(error,stdout,stderr){ 
       console.log('error: ',error); 
       console.log('stdout: ',stdout); 
       console.log('stderr: ',stderr); 

       future.return(stdout.toString()); 
      }); 

return future.wait(); 

теперь ваш метод Метеор будет ждать, пока сценарий не закончит.

(предостережение: я не пробовал это, просто печатая это решение из памяти на моей нерабочей машину)

 Смежные вопросы

  • Нет связанных вопросов^_^