Node.js笔记(九)Nodejs与shell
众所周知。Nodejs是单进程异步执行的。但不光是单进程,Nodejs也提供了多进程方面的支持
其创始人应该还是比較重视这一块的,最有力的证据就是child_process是Nodejs核心模块之中的一个
大多数情况下应该用不到这个模块,但child_process却能做非常多有意思的事情
shell调用
近期用到的比較有用的功能。在做大数据处理的时候。须要依据客户在页面上的点击转化为spark集群的命令
spark是用scala写的,跟Nodejs半点关系都没有
考虑了一段时间后,决定用shell来解决
shell脚本基础
shell事实上非常easy,你在控制台输个cd desktop然后回车,这就是最简单的shell指令,
把这行指令写在文本里。就是shell脚本了
比如:
test.sh
#!bin/bash
spark-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 对象
使用也非常easy,值得注意的有三点
- timeout
- stdout
- stderr
用shell的方式来实现这样的跨语言调用通常被觉得是不稳定的,
linux的exec命令执行后。原有进程会被替换成新的进程。进而失去对新进程的控制
初次之外。还有shell出错。由于各种原因卡死等情况
Nodejs提供了比較好的解决方式。timeout攻克了卡死的问题
stdout和stderr则提供了标准输出和错误输出,使得子进程的状态能够被获取
详细用法例如以下:
var call_sh = require('child_process');
//para是json格式的数组。由post得到
function callsh(file,para){
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的更多相关文章
- Node.js 笔记(一) nodejs、npm、express安装
Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...
- Node.js 笔记(一) nodejs、npm、express安装(转)
转载地址:http://blog.csdn.net/haidaochen/article/details/7257655 Windows平台下的node.js安装 直接去nodejs的官网http:/ ...
- node.js 笔记
教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...
- Node.js 笔记01
一.Node.js 前言 1.node.js 之父 Ryan Dahl(瑞安达尔) ,技术好,颜值高! 数学系博士, 中途退学, 为了生活, 学习了Ruby On Rails接Web项目, 经过两年成 ...
- node.js 笔记(一)
参考:https://github.com/alsotang/node-lessons 感谢!!! 本文属于小白入门级笔记,请大牛自动屏蔽!!! 1. 开发环境 os: 10.12.6 nod ...
- node.js笔记
在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装2.通过命令行安装 需要用到 homebrew(mac上专门用 ...
- Node.js笔记3
###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...
- Node.js笔记1
Node.js入门笔记 1. node -help 可以显示帮助信息2. node REPL 模式(Read-eval-print loop) 输入—求值—输出循环 直接在cmd输入node 可以进入 ...
- node.js 笔记一
现在地址:http://nodejs.org/download/ 我的机器是windows的,选择的文件是,是编译后的版本:Windows Installer (.msi) 32-bit examp ...
- Node.js 笔记02
一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...
随机推荐
- JsonRequestBehavior.AllowGet 方便浏览器调试
[HttpGet] public ActionResult getCoversationList(int CustomerId) { // 获取用户相关的聊天数据,包括个人,群,系统(可以单独获取) ...
- MVP模式入门(结合Rxjava,Retrofit)
本文MVP的sample实现效果: github地址:https://github.com/xurui1995/MvpSample 老规矩,在说对MVP模式的理解之前还是要再谈谈MVC模式,了解了MV ...
- 计算文件大小(C/C++语言)
#include <stdio.h> int main() { FILE* fp; if (fp = fopen("read files.exe", "r&q ...
- 分享一个tom大叔的js 深入理解系列 (有助于提升)
http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html#3620172
- js 判断对touch事件支持
$.support = (function() { var support = { touch: !!(('ontouchstart' in window) || window.DocumentTou ...
- 安装oracle常见问题分析
1,之前已经安装过软件,卸载不完全 /tmp/.oracle /tmp/ora* /var/tmp/ora* /etc/ora* 2,安装介质权限或者本身就有问题 3,oracle用户 $/HOME/ ...
- js中迭代的常用几种方法
var arr = [1,3,2,5,3]; //forEach 两个参数,第一个为数组内容,第二个为数组下标arr.forEach(function(item,index) { console.lo ...
- python + eclipse + django + postgresql 开发网站(二)
引用与参考 http://www.cnblogs.com/lanxuezaipiao/p/3283932.html python2.7 django1.6 1.新建Django项目
- js---14公有私有成员方法
var ns1 = {}; //命名空间 ns1.ns11 = {};//子命名空间 ns1.module1 = {name:"a",m:function(){}}; consol ...
- [BZOJ3566][SHOI2014]概率充电器 换根树形DP
链接 题意:n个充电元件形成一棵树,每个点和每条边都有各自的充电概率,元件可以自身充电或者通过其他点和边间接充电,求充电状态元件的期望个数 题解 设1为根节点 设 \(f[x]\) 表示 \(x\) ...