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 目录名 创建文件夹 ...
随机推荐
- CentOS7 启动[root@localhost ~]# systemctl start docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for de
1).在linux虚拟机上安装docker步骤:1.检查内核版本,必须是3.10及以上uname ‐r2.安装dockeryum install docker3.输入y确认安装4.启动docker[r ...
- 4.angularJS-指令(directive)
转自:https://www.cnblogs.com/best/p/6225621.html 指令(directive)是AngularJS模板标记和用于支持的JavaScript代码的组合.Angu ...
- codeforces 710D Two Arithmetic Progressions(线性同余方程)
题目链接: http://codeforces.com/problemset/problem/710/D 分析:给你两个方程 a1k + b1 and a2l + b2,求在一个闭区间[L,R]中有多 ...
- 使用js实现简单放大镜的效果
实现原理:使用2个div,里面分别放大图片和小图片,在小图片上应该还有一个遮罩层,通过定位遮罩层的位置来定位大图片的相对位置,而且,遮罩层的移动应该和大图片的移动方向相反 关键: 大图片和小图片大小比 ...
- javascript 基础篇 随课笔记
!DOCTYPE HTML><html><head><meta name="content-type" content="text/h ...
- pwd---以绝对路径的方式显示用户当前工作目录
pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示根目录,最后一个目录是当前目录.执行pwd命令可立刻得知您目前所在的 ...
- 【Henu ACM Round #13 F】Fibonacci-ish
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举序列的头两个数字是什么 O(N^2) 然后头两个数字确定之后. f[3],f[4]..就确定了 只需查看f[3],f[4]..是 ...
- 洛谷 P2690 接苹果
P2690 接苹果 题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从 ...
- Spark Tachyon编译部署(含单机和集群模式安装)
Tachyon编译部署 编译Tachyon 单机部署Tachyon 集群模式部署Tachyon 1.Tachyon编译部署 Tachyon目前的最新发布版为0.7.1,其官方网址为http://tac ...
- linux环境下禅道搭建
1.下载禅道安装包,根据操作系统的版本: 2.上传包到linux的opt目录中: 3.解压包: cd /opt tar xzvf 禅道包名称,如:tar xzvf ZenTaoPMS.8.1.3.zb ...