① 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監聽服務主地址,以便獲取容器信息。