2016-12-07 6 views
-1

私は流星からサーバー側を実行しているbashスクリプトを持っています。私は、 'ls'を実行して期待される応答を返すことで、シェルコマンドを正常に実行できることをテストしました。しかし、シェルスクリプトを実行すると、出力はサーバコンソールに記録されず、意図したスクリプトの効果は成功しません。私はstderr、stdout、およびerrorを表示していますが、スクリプトを実行すると何も表示しません。それは現在、/ binに/ lsとコメントアウトされているがMeteorからbashスクリプトサーバー側を実行する際の問題

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/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. 

のみ実行するために数ミリ秒を取っています。つまり、Meteorメソッドはexec()が終了する前に終了する可能性があります。私はMeteorで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(); 

:よう

何か。

(警告:私はちょうど私の非作業機械上のメモリからこのソリューションを入力し、これをしようとしなかった)

関連する問題