zoukankan      html  css  js  c++  java
  • 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,值得注意的有三点

    1. timeout
    2. stdout
    3. 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);
        }
        });
    }
    
  • 相关阅读:
    可运行的Java RMI示例和踩坑总结
    JS异步与同步
    Github作为Maven仓库
    Jmeter笔记
    nodeJS生成xlsx以及设置样式
    double运算的坑
    mysql零散操作
    go包的理解
    nodeJS 服务端文件上传
    webpack+thymeleaf实现数据直出
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6971085.html
Copyright © 2011-2022 走看看