Node.js笔记(九)Nodejs与shell

众所周知,Nodejs是单进程异步运行的,但不光是单进程,Nodejs也提供了多进程方面的支持 其创始人应该还是比较重视这一块的,最有力的证据就是child_process是Nodejs核心模块之一

大多数情况下应该用不到这个模块,但child_process却能做很多有意思的事情

shell调用

最近用到的比较实用的功能,在做大数据处理的时候,需要根据客户在页面上的点击转化为spark集群的命令 spark是用scala写的,跟Nodejs半点关系都没有 考虑了一段时间后,决定用shell来解决

shell脚本基础 shell其实很简单,你在控制台输个cd desktop然后回车,这就是最简单的shell指令, 把这行指令写在文本里,就是shell脚本了 例如: test.sh

#!bin/bashspark-submit test.jar para1 para2……

在*nix系统下可以使用命令

sh test.sh

来执行这个脚本,效果跟直接敲命令

spark-submit test.jar para1 para2……

是一样的

Nodejs的execfile方法 原型如下:

child_process.execFile(file, args, options, callback)说明:file {String} 要运行的程序的文件名args {Array} 字符串参数列表options {Object}cwd {String} 子进程的当前工作目录env {Object} 环境变量键值对encoding {String} 编码(缺省为 ‘utf8’)timeout {Number} 超时(缺省为 0)maxBuffer {Number} 最大缓冲(缺省为 200*1024)killSignal {String} 结束信号(缺省为 ‘SIGTERM’)callback {Function} 进程结束时回调并带上输出error {Error}stdout {Buffer}stderr {Buffer}返回:ChildProcess 对象

使用也很简单,值得注意的有三点

用shell的方式来实现这种跨语言调用通常被认为是不稳定的, linux的exec命令执行后,原有进程会被替换成新的进程,,进而失去对新进程的控制 初次之外,还有shell出错,因为各种原因卡死等情况 Nodejs提供了比较好的解决方案,timeout解决了卡死的问题 stdout和stderr则提供了标准输出和错误输出,使得子进程的状态可以被获取 具体使用方法如下:

var call_sh = require(‘child_process’);{call_sh.execFile(file,[para.attr1,para.attr2],function (error, stdout, stderr) {console.log(‘stdout: ‘ + stdout);console.log(‘stderr: ‘ + stderr);if (error !== null) {console.log(‘exec error: ‘ + error);}});}

观今宜鉴古,无古不成今。

Node.js笔记(九)Nodejs与shell

相关文章:

你感兴趣的文章:

标签云: