Node运行Shell命令
child_process(原生)
Nodejs下引入模块child_process实现调用shell
调用的两种方式
1 | child_process.exec(command[, options][, callback]) |
Nodejs中通过 exec执行shell脚本,并打印查询到的信息
1 | var child = require('child_process'); |
执行文件
1 | const exec = require('child_process').execSync |
对应的shell文件
1 | !/bin/bash |
示例
1 | const util = require('util'); |
注意
util.promisify
是在node.js 8.x
版本中新增的一个工具,用于将老式的Error first callback
转换为Promise
对象,让老项目改造变得更为轻松。
shelljs(三方)(推荐)
shelljs是j基于nodeAPI的一个扩展,要引入插件:(npm地址);
它比原生的child_process的兼容性更好,使用更灵活,这个插件的使用率很高。
安装
1 | npm install shelljs --save |
和child_process
同样的调用方式
1 | var shell = require('shelljs'); |
这个插件不仅可以调用exec执行shell命令,也封装了一些快捷操作指令,具体使用文档请参考github地址。
1 | var shell = require('shelljs'); |
官方示例
1 | var shell = require('shelljs'); |
simple-git(GIT)
执行shell脚本操作git,其实对于复杂的git命令语句,写起来还是很不方便,最后介绍一个专为git设计的插件:simple-git(npm地址)
- 在项目中引入插件后,调用simple-git/promise可执行异步git操作,方便结合async/await使用
- 它封装并支持了很多git的方法,比如clone、commit、status、pull等等,将cmd命令和参数,传入即可
- 甚至可以用
git.raw()
,解析前端输入的git命令
安装
1 | npm install simple-git |
示例
1 | const simpleGit = require('simple-git/promise'); |
总结
这里总结了几种基于node的方式:
- child_process 原生nodeAPI,需根据需要选型
- shelljs Node的一个扩展插件、兼容性好,推荐使用
- simple-git 专为git命令打造的插件,轻量好用
Node查看服务器配置
NodeJS获取系统信息
操作系统
1 | const os = require('os'); |
返回值有
- darwin
- freebsd
- linux
- sunos
- win32
CPU及负载
1 | const os = require('os'); |
os.loadavg()
方法返回一个数组,包含 1、5 和 15 分钟平均负载。
平均负载是系统活动的测量,由操作系统计算得出,表达为一个分数。 一般来说,平均负载应该理想地比系统的逻辑 CPU 的数目要少。
平均负载是 UNIX 相关的概念,在 Windows 平台上没有对应的概念。 在 Windows 上,其返回值总是 [0, 0, 0]
。
对于单核心的CPU来说
系统负荷为0,意味着大桥上一辆车也没有
系统负荷为0.5,意味着大桥一半的路段有车。
系统负荷为1.0,意味着大桥的所有路段都有车,但任然可以顺次通行
系统负荷为1.7,除了桥满之外,在桥的入口处还有70%的车辆在等待
对于多核来说,我们可以用负载/核心数量
来运算
内存
1 | const os = require('os'); |
网卡信息
1 | const os = require('os'); |
分配的网络地址的对象上可用的属性包括:
address
分配的 IPv4 或 IPv6 地址。netmask
IPv4 或 IPv6 的子网掩码。family
IPv4
或IPv6
。mac
网络接口的 MAC 地址。internal
如果网络接口是不可远程访问的环回接口或类似接口,则为true
,否则为false
。scopeid
数值型的 IPv6 作用域 ID(仅当family
为IPv6
时指定)。cidr
以 CIDR 表示法分配的带有路由前缀的 IPv4 或 IPv6 地址。如果netmask
无效,则此属性会被设为null
。
硬盘
添加依赖
1 | npm i diskinfo |
查看硬盘
1 | var diskinfo = require('diskinfo'); |
这个支持Win和Linux,不支持MacOS
Node解析Nginx配置
安装依赖
1 | npm install nginx-conf --save |
说明文档:https://www.npmjs.com/package/nginx-conf
生成静态项目配置
1 | const NginxConfFile = require('nginx-conf').NginxConfFile; |
生成反向代理配置
1 | const NginxConfFile = require('nginx-conf').NginxConfFile; |
注意
所有添加的属性都要以数组的方式来获取
比如
conf.nginx.server[0].server_name[0]._value
修改配置
1 | // 当配置改变时不写到磁盘中 |
MacOS 上安装timeout
1 | brew install coreutils |
使用:
1 | gtimeout |
还可以加上别名:
1 | alias timeout=gtimeout |