我想等待服务器准备就绪,然后在其上运行任务
编辑:我已经想通了一些。我正在正确过滤我的字符串。但是,我怎样才能让它在后台运行,并在咕噜声序列完成时终止它?
考虑 grunt common server spec-e2e
这将运行常见任务,运行 grunt 服务器,然后(不停止服务器)在顶部运行下一个任务。完成所有这些操作后,它会自动关闭服务器。
这就是我正在尝试创建的功能。
我学到的几个要点:
- 从节点启动的进程 - 例如
require('child_process').spawn(...)
- 将继续为所有后续的 grunt 任务运行(单个任务完成后,它们不会关闭)。 - 一旦 grunt 完成任务序列的运行,它将终止所有生成的进程。
因此,命令 grunt selendroid:selendroid.jar spec-e2e
- selendroid
任务启动服务器的位置 - 将使服务器保持运行,直到spec-e2e
任务完成。
我的selendroid
任务的代码是:
grunt.registerTask('selendroid', 'Start selendroid server', function (appLocation) {
var done = this.async();
var timeout = setTimeout(function() {
console.log('Selendroid took too long to start');
done(false);
}, 30000);
function checkLoaded(data) {
data = data.toString();
if (data.indexOf('Selendroid standalone server has been started on port') > -1) {
clearTimeout(timeout);
done();
}
}
if (typeof appLocation === 'undefined') {
console.log('App to test not set, aborting...'.red);
done(false);
}
var cmd = require('child_process').spawn('java', ['-jar', 'selendroid.jar', '-app', appLocation]);
cmd.stdout.on('data', function(data) {
checkLoaded(data);
});
cmd.stderr.on('data', function(data) {
checkLoaded(data);
});
});