① shell怎么执行node命令
这个要先准备个shell脚本,比如我要连到一台服务器,来修改它的密码,则我要提供IP,user,new pwd,old pwd,新建shell脚本文件change_password.sh:
复制代码代码如下:
#!/bin/sh
IP=""
NAME=""
PASSWORD=""
NEWPASSWORD=""
while getopts "H:U:P:N:" arg #选项后面的冒号表示该选项需要参数
do
case $arg in
H)
IP=$OPTARG
;;
U)
NAME=$OPTARG
;;
P)
PASSWORD=$OPTARG
;;
N)
NEWPASSWORD=$OPTARG
;;
?) #当有不认识的选项的时候arg为?
echo "含有未知参数"
exit 1
;;
esac
done
#先获取userid
USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user list | grep root | awk '{print $1}'`
# echo $USERID
#根据userid来修改密码
/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user set password $USERID $NEWPASSWORD
② 如何在nodejs里调用执行系统命令
这篇文章主要介绍了Nodejs中调用系统命令、Shell脚本和python脚本的方法和实例,本文给出了利用子进程调用系统命令、执行系统命令、调用传参数的shell脚本、调用python脚本的例子,需要的朋友可以参考下
每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入、标准输出及标准错误输出的接口。
NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:
标准输入、标准输出及标准错误输出的接口
child.stdin 获取标准输入
child.stdout 获取标准输出
child.stderr 获取标准错误输出
获取子进程的PID:child.pid
提供生成子进程的方法:child_process.spawn(cmd, args=[], [options])
提供直接执行系统命令的方法:child_process.exec(cmd, [options], callback)
提供调用脚本文件的方法:child_process.execFile(file, [args], [options], [callback])
提供杀死进程的方法:child.kill(signal='SIGTERM')
用实例来感受一下,很有意思的,呵呵~~
1、利用子进程调用系统命令(获取系统内存使用情况)
新建nodejs文件,名为cmd_spawn.js,代码如下:
复制代码 代码如下:
var spawn = require('child_process').spawn;
free = spawn('free', [
③ 用docker搭建一个高可用可扩展的服务支撑系统怎么做
一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。
一、架构优势
约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:
自动、实时发现及无感知服务刷新;
支持任意多台Docker主宿机;
支持多种APP接入且打散至不分主宿机;
采用Etcd存储信息,集群支持可靠性高;
采用Confd配置引擎,支持各类接入层,如Nginx;
支持负载均衡、故障迁移;
具备资源弹性,伸缩自如(通过生成、销毁容器实现);
在HECD架构中,首先管理员操作Docker Client,除了提交容器(Container)启动与停止指令外,还通过REST-API方式向Etcd(K/V)存储组件注册容器信息,包括容器名称、主宿机IP、映射端口等。Confd配置组件会定时查询Etcd组件获取最新的容器信息,根据定义好的配置模板生成Haproxy配置文件Haproxy.cfg,并且自动reload haproxy服务。用户在访问业务服务时,完全没有感知后端APP的上线、下线、切换及迁移,达到了自动发现、高可用的目的。详细架构图见图1-1。
图1-1 平台架构图
为了方便大家理解各组件间的关系,通过图1-2进行架构流程梳理,首先管理员通过Shell或API操作容器,下一步将容器信息注册到Etcd组件,Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息,最后通过Confd的模板引擎生成Haproxy配置,整个流程结束。
图1-2架构流程图
了解架构流程后,我们逐一对流程中各组件进行详细介绍。
1、Etcd介绍
Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
简单:支持 curl 方式的用户 API (HTTP+JSON)
安全:可选 SSL 客户端证书认证
快速:单实例可达每秒 1000 次写操作
可靠:使用 Raft 实现分布式
2、Confd介绍
Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
3、Haproxy介绍
HAProxy是提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。(来源网络)
三、架构部署
平台环境基于Centos6.5+Docker1.2构建,其中Etcd的版本为etcd version 0.5.0-alpha,Confd版本为confd 0.6.2,Haproxy版本为HA-Proxy version 1.4.24。下面对平台的运行环境、安装部署、组件说明等进行详细说明,环境设备角色表如下:
1、组件安装
1.1 Docker安装
SSH终端登录192.168.1.22服务器,执行以下命令:
1.2 Haproxy、confd安装
SSH终端登录192.168.1.20服务器,执行以下命令:
1.3 Etcd安装
SSH终端登录192.168.1.21服务器,执行以下命令:
2.1 Etcd配置
由于etcd是一个轻量级的K/V存储平台,启动时指定相关参数即可,无需配置。
由于etcd是通过REST-API方式进行交互,常见操作如下:
1) 设置(set) key操作
3) 删除key信息
2.2 Confd+Haproxy配置
由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。具体配置如下:
创建配置文件目录
详细见以下配置文件,其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令,本例中配置成haproxy的reload命令。
【/etc/confd/conf.d/ haproxy.toml】
Confd模板引擎采用了Go语言的文本模板,更多见http://golang.org/pkg/text/template/,具备简单的逻辑语法,包括循环体、处理函数等,本示例的模板文件如下,通过range循环输出Key及Value信息。
【/etc/confd/templates/haproxy.cfg.tmpl】
本小节详细说明Confd模板引擎基础语法与示例,下面为示例用到的KEY信息。
作为path.Base函数的别名,获取路径最后一段。
{{ with get "/app/servers/prickly_blackwell"}}
server {{base .Key}} {{.Value}} check
{{end}}
2、get
返回一对匹配的KV,找不到则返回错误。
{{with get "/app/servers/prickly_blackwell"}}
key: {{.Key}}
value: {{.Value}}
{{end}}
{{range gets "/app/servers/*"}}
{{.Key}} {{.Value}}
{{end}}
返回一个匹配key的字符串型Value,找不到则返回错误。
{{getv "/app/servers/cocky_morse"}}
返回所有匹配key的字符串型Value,找不到则返回错误。
{{range getvs "/app/servers/*"}}
value: {{.}}
{{end}}
对输入的字符串做split处理,即将字符串按指定分隔符拆分成数组。
{{ $url := split (getv "/app/servers/cocky_morse") ":" }}
host: {{index $url 0}}
port: {{index $url 1}}
返回所有的字符串型子key,找不到则返回错误。
{{range ls "/app/servers/"}}
subkey: {{.}}
{{end}}
返回所有的字符串型子目录,找不到则返回一个空列表。
{{range lsdir "/app/"}}
subdir: {{.}}
{{end}}
下面为启动Confd服务命令行,参数“interval”为指定探测etcd的频率,单位为秒,参数“-node”为指定etcd监听服务主地址,以便获取容器信息。