2016-04-20 13 views
2

私は、アプリケーションをデプロイするためのコマンドを実行するためのbashスクリプトを起動するためにbitbucketからwebhookを使用しているノードアプリケーションを持っています。それは動作しますが、私は実行されているコマンドのどれも見ることができません(つまり、進捗コマンドecho'd)。どうすればこれを達成できますか?ここでノードスクリプトから実行したときにbashコマンドを表示する方法

は、関連するコードです:

var shellPath = path.join(__dirname + '../../deploy/deploy.sh'); 
    var exec = require('child_process').exec; 

    function puts(error, stdout, stderr) { 
    console.log('stout: ', stdout) 
    console.log('error: ', error) 
    console.log('stderr: ', stderr) 
    } 

    exec(shellPath, puts); 

deploy.sh -

echo Preparing to Git Fetch 
git reset --hard origin/master 
echo Preparing to clean 
git clean -f 
echo Preparing to pull 
git pull 
echo preparing to pull 
npm i --production 
echo preparing to restart pm2 
pm2 restart client-www 
echo Finished deploy 
+1

参照:[bashスクリプトのデバッグ方法](http://unix.stackexchange.com/q/155551/74329) – Cyrus

答えて

0

あなたのようなファイルにだけ出力結果をできます

var shellPath = path.join(__dirname + '../../deploy/deploy.sh > ./output.log'); 
var exec = require('child_process').exec; 

function puts(error, stdout, stderr) { 
    console.log('stout: ', stdout) 
    console.log('error: ', error) 
    console.log('stderr: ', stderr) 
} 

exec(shellPath, puts); 

とするためにこれを使用します時計ファイルとプリント出力always-tail

var Tail = require('always-tail'); 
var fs = require('fs'); 
var filename = "./output.log"; 

if (!fs.existsSync(filename)) fs.writeFileSync(filename, ""); 

var tail = new Tail(filename, '\n'); 

tail.on('line', function(data) { 
    console.log("got line:", data); 
}); 


tail.on('error', function(data) { 
    console.log("error:", data); 
}); 

tail.watch();