从node.js调用sh脚本

我有一个node.js应用程序,每天连接到服务器。

在此服务器上,可以使用新版本的应用程序,如果有的话,安装的应用程序会下载它,检查下载是否完成,如果是,则停止调用一个shell脚本,该脚本将replace旧应用程序,并启动它。

我正在努力开始更新脚本。

我知道我可以用child_process_execFile函数启动它,我这样做:

var execF = require('child_process').execFile; var PATH = process.argv[1].substr(0, process.argv[1].lastIndexOf('/')+1), filename = 'newapp.js', execF(PATH + 'up.sh', [PATH + filename], function () {console.log('done'); return ;}); 

up.sh,现在只是:

 cat $1 > /home/pi/test 

我在控制台上打印完成,但是没有创buildtesting。

我知道execFile创build一个subprocess,是什么阻止脚本来做到这一点?

如果我想开始这个,我知道我只需要在脚本中做一些cp来让我的应用程序自动更新。

编辑:

像往常一样开始(从控制台调用脚本),它运行良好,从node.js调用时脚本不执行的原因吗?

我build议你考虑使用一个模块,可以自动为你做这个,而不是重复这个工作。 或者,至less使用他们的技术作为你自己的需求的灵感。

一个例子是: https : //github.com/edwardhotchkiss/always

使用起来很简单:

 Usage: always <app.js> => always app.js 

然后,任何时候你的代码改变,应用程序被杀害,并重新启动。

正如你在源代码中看到的那样,它使用Monitor类来监视一个指定的文件,然后使用spawn来启动它(当然,当发生更改时kill会结束进程)。

不幸的是, [always]输出目前被硬编码到代码中,但是这将是一个简单的更改/拉取请求,我确定它是可选/可configuration的。 如果作者不接受你的改变,你可以修改代码的本地副本(因为它非常简单)。

确保何时产生/执行正在执行将要处理脚本的shell而不是脚本本身的进程。

应该是这样的

 execF("/usr/bin/sh", [PATH + 'up.sh', PATH + filename]);