Linux 如何通過某一臺服務器調用執行多臺遠程服務器上的腳本,結果顯示在本地?...

現在都流行自動化運維了,可能目前技術不夠,很多自動化工具還不怎么會用,所以本次只是通過ssh來實現功能。

說明:自己寫的一個簡單腳本,只是實現了基礎功能,還有待優化。

一共三臺機器:

master:192.168.4.91

slave1:192.168.4.45

slave2:192.168.4.96

在slave1上遠程執行master、slave2上的腳本,結果顯示或者放到本地。當然多臺系統也行。

一、腳本功能主要是監控系統的一些資源,像cpu,磁盤,網速等等。System_Load.sh

[root@master ~]# cat System_Load.sh

#!/bin/bash
echo -e "\033[31m............................系統當前時間............................\033[0m"
echo -e "System Time: `date "+%Y-%m-%d %H:%M:%S"`"
echo -e "\033[31m...........................主機名以及IP地址.........................\033[0m"
count=`ifconfig |grep Ethernet |grep '^e' |awk '{print $1}'|wc -l`
ifconfig |grep Ethernet |grep '^e' |awk '{print $1}' > /tmp/.value
i=1
while read line
do
em[$i]=$line
i=`expr $i + 1`
done < /tmp/.value
#echo $i
#i=1
for i in `seq $count`
do
echo "${em[$i]}" > /dev/null
done
Hostname=`hostname`
if [ $count = 0 ];then
echo "該服務器沒有網卡"
elif [ $count = 1 ];then
em1_ip=`ifconfig ${em[1]} |grep "inet addr" |awk '{print $2}'|awk -F: '{print $2}'`
echo -e "Hostname:"$Hostname "${em[1]}_IP:" $em1_ip
else
em1_ip=`ifconfig ${em[1]} |grep "inet addr" |awk '{print $2}'|awk -F: '{print $2}'`
em2_ip=`ifconfig ${em[2]} |grep "inet addr" |awk '{print $2}'|awk -F: '{print $2}'`
echo -e "Hostname:"$Hostname "${em[1]}_IP:" $em1_ip
echo -e "Hostname:"$Hostname "${em[2]}_IP:" $em2_ip
fi

#CPU以及進程數量監控
echo -e "\033[31m.............cpu load average and process number..................\033[0m"
#us(user time):用戶進程執行消耗cpu時間;sy(system time):系統進程執行消耗cpu時間;id:空閑時間(包括IO等待時間);wa:等待IO時間。
CPU_us=$(vmstat | awk '{print $13}' | sed -n '$p')
CPU_sy=$(vmstat | awk '{print $14}' | sed -n '$p')
CPU_id=$(vmstat | awk '{print $15}' | sed -n '$p')
CPU_wa=$(vmstat | awk '{print $16}' | sed -n '$p')
CPU_st=$(vmstat | awk '{print $17}' | sed -n '$p')

CPU1=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
sleep 1
CPU2=`cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'`
IDLE1=`echo $CPU1 | awk '{print $4}'`
IDLE2=`echo $CPU2 | awk '{print $4}'`
CPU1_TOTAL=`echo $CPU1 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
CPU2_TOTAL=`echo $CPU2 | awk '{print $1+$2+$3+$4+$5+$6+$7}'`
IDLE=`echo "$IDLE2-$IDLE1" | bc`
CPU_TOTAL=`echo "$CPU2_TOTAL-$CPU1_TOTAL" | bc`
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk '{printf "%.2f",$1}'`

echo -e "us=$CPU_us\tsy=$CPU_sy\tid=$CPU_id\twa=$CPU_wa\tst=$CPU_st"
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
if [ $CPU_RATE -ge 80 ]
then echo "CPU Warn"
ps aux | grep -v USER | sort -rn -k3 | head
fi
load_average=$(uptime |gawk -F':' '{print $NF}')
running_process=$(top -b -d 1 -n 1 |sed -n '2p' |awk -F',' '{print $2}' |awk '{print $1}')
total_process=$(ps -ef |wc -l)
echo
echo "CPU_load_average: ${load_average}"
echo "running_process: ${running_process}"
echo "total_process: ${total_process}"

Host_running_time=$(uptime |sed 's/^.*up//' | awk -F "," '{print $1,$2}')
User_connection_number=$(uptime |cut -d , -f 3)
echo -e "Host_running_time:\t${Host_running_time}\t"
echo -e "User_connection_number:${User_connection_number}"

#系統內存監控
echo -e "\033[31m.......................System Mem usage.............................\033[0m"
Total_Mem=$(free -m |sed -n '2p' |awk '{print $2}')
Usage_Mem=$(free -m |sed -n '2p' |awk '{print $3}')
Free_Mem=$(free -m |sed -n '2p' |awk '{print $4}')
Mem_Usage_Percent=`free -m |sed -n '2p'|awk '{printf "%-1d",$3/$2*100}'`

Swap_Total_Mem=$(free -m |sed -n '4p' |awk '{print $2}')
Swap_Usage_Mem=$(free -m |sed -n '4p' |awk '{print $3}')
Swap_Free_Mem=$(free -m |sed -n '4p' |awk '{print $4}')
Swap_Mem_Usage_Percent=`free -m |sed -n '4p'|awk '{printf "%-1d",$3/$2*100}'`
echo -e "Total_Mem: ${Total_Mem}M\t\t" "Usage_Mem: ${Usage_Mem}M\t"
echo -e "Free_Mem: ${Free_Mem}M\t\t" Mem_Usage_Percent: ${Mem_Usage_Percent}%
echo -e "Swap_Total_Mem: ${Swap_Total_Mem}M\t\t" "Swap_Usage_Mem: ${Swap_Usage_Mem}M\t"
echo -e "Swap_Free_Mem: ${Swap_Free_Mem}M\t\t" Swap_Mem_Usage_Percent: ${Swap_Mem_Usage_Percent}%


#磁盤監控
echo -e "\033[31m..........................Disk usager...........................\033[0m"
#parted適用于Ubuntu
#parted -l |grep -i 'disk' |grep '/dev/[a-z]d[a-z]' |awk -F: '{print $1}' |awk '{print $2}' > /tmp/.disknumber
fdisk -l |grep -i 'disk' |grep '/dev/[a-z]d[a-z]' |awk -F: '{print $1}' |awk '{print $2}' > /tmp/.disknumber
countdisk=`cat /tmp/.disknumber|wc -l`
i=1
while read line
do
disk[$i]=$line
i=`expr $i + 1`
done < /tmp/.disknumber
for i in `set $countdisk`
do
echo "disk[$i]" > /dev/null
done
#disk1_usage=`df -h |grep "${disk[1]}" |awk '{print $5}'`
disk1_home_usage=`df -h |grep home |awk '{print $5}'`
disk1_root_usage=`df -h |grep "/$" |awk '{print $4}'`
disk1_var_usage=`df -h |grep "var" |awk '{print $5}'`
disk1_boot_usage=`df -h |grep "boot" |awk '{print $5}'`
if [ $countdisk -eq 1 ];then
echo -e "${disk[1]} disk usage---------> "
if [ "${disk1_home_usage}" != '' ];then
echo "home partion usage:$disk1_home_usage"
fi
if [ "${disk1_root_usage}" != '' ];then
echo "root partion usage:$disk1_root_usage"
fi
if [ "${disk1_var_usage}" != '' ];then
echo "var partion usage:$disk1_var_usage"
fi
if [ "${disk1_boot_usage}" != '' ];then
echo "boot partion usage:$disk1_boot_usage"
fi
elif [ $countdisk -eq 2 ];then
disk2_data1_usage=`df -h |grep "${disk[2]}" |awk '{print $5}'`
echo -e "${disk[2]} disk usage: "
echo "data1 partion usage:${disk2_data1_usage}"
echo "${disk[1]} disk usage: "
if [ "${disk1_home_usage}" != '' ];then
echo "home partion usage:$disk1_home_usage"
fi
if [ "${disk1_root_usage}" != '' ];then
echo "root partion usage:$disk1_root_usage"
fi
if [ "${disk1_var_usage}" != '' ];then
echo "var partion usage:$disk1_var_usage"
fi
if [ "${disk1_boot_usage}" != '' ];then
echo "boot partion usage:$disk1_boot_usage"
fi
fi
#網卡速率和流量監控
echo -e "\033[31m..................Network card rate and traffic.......................\033[0m"
em1_ip=`ifconfig ${em[1]} |grep "inet addr" |awk '{print $2}'|awk -F: '{print $2}'`
em2_ip=`ifconfig ${em[2]} |grep "inet addr" |awk '{print $2}'|awk -F: '{print $2}'`
em1_rx=`ifconfig ${em[1]} |sed -n '8p' |awk -F '[()]' '{print $2}'`
em1_tx=`ifconfig ${em[1]} |sed -n '8p' |awk -F '[()]' '{print $4}'`
em2_rx=`ifconfig ${em[2]} |sed -n '8p' |awk -F '[()]' '{print $2}'`
em2_tx=`ifconfig ${em[2]} |sed -n '8p' |awk -F '[()]' '{print $4}'`
#em1_Speed=`ethtool $em1 |grep -i speed |awk -F : '{print $2}'`
#em2_Speed=`ethtool $em2 |grep -i speed |awk -F : '{print $2}'`
FLOWA=/tmp/.${em[1]}
ifconfig ${em[1]} |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA
INPUTA=`cat $FLOWA |awk '{print $2}'`
OUTPUTA=`cat $FLOWA |awk '{print $4}'`
sleep 1
ifconfig ${em[1]} |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA
INPUTB=`cat $FLOWA |awk '{print $2}'`
OUTPUTB=`cat $FLOWA |awk '{print $4}'`
INPUTC=`echo "$INPUTB-$INPUTA" | bc`
OUTPUTC=`echo "$OUTPUTB-$OUTPUTA"| bc`
INPUTMBA=`echo $INPUTC |awk '{printf "%0.3f\n",$1/1024}'`
OUTPUTMBA=`echo $OUTPUTC |awk '{printf "%0.3f\n",$1/1024}'`
INPUT=`echo $INPUTMBA |awk '{printf "%0.3f\n",$1/1024}'`
OUTPUT=`echo $OUTPUTMBA |awk '{printf "%0.3f\n",$1/1024}'`
if [ $INPUTC -le 1048576 ];then
if [ $OUTPUTC -le 1048576 ];then
echo -e "${em[1]}_ip: ${em1_ip}\t" "${em[1]}_RX: ${em1_rx}\t" "${em[1]}_TX: ${em1_tx} " "${em[1]}_Input_Second:"${INPUTMBA}K/S" "${em[1]}_Output_Second:"${OUTPUTMBA}K/S"
else
echo -e "${em[1]}_ip: ${em1_ip}\t" "${em[1]}_RX: ${em1_rx}\t" "${em[1]}_TX: ${em1_tx} " "${em[1]}_Input_Second:"${INPUTMBA}K/S" "${em[1]}_Output_Second:"${OUTPUT}M/S"
fi
elif [ $INPUTC -gt 1048576 ];then
if [ $OUTPUTC -gt 1048576 ];then
echo -e "${em[1]}_ip: ${em1_ip}\t" "${em[1]}_RX: ${em1_rx}\t" "${em[1]}_TX: ${em1_tx} " "${em[1]}_Input_Second:"${INPUT}M/S" "${em[1]}_Output_Second:"${OUTPUTMBA}K/S"
else
echo -e "${em[1]}_ip: ${em1_ip}\t" "${em[1]}_RX: ${em1_rx}\t" "${em[1]}_TX: ${em1_tx} " "${em[1]}_Input_Second:"${INPUT}M/S" "${em[1]}_Output_Second:"${OUTPUT}M/S"
fi
fi
if [ -z ${em[2]} ];then
echo
else
FLOWA=/tmp/.${em[2]}
ifconfig ${em[2]} |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA
INPUTA=`cat $FLOWA |awk '{print $2}'`
OUTPUTA=`cat $FLOWA |awk '{print $4}'`
sleep 1
ifconfig ${em[2]} |grep "RX byte" |awk '{print $2" "$6}' |awk -Fbytes: '{print "INPUT "$2"OUTPUT "$3}'\ > $FLOWA
INPUTB=`cat $FLOWA |awk '{print $2}'`
OUTPUTB=`cat $FLOWA |awk '{print $4}'`
INPUTC=`echo "$INPUTB-$INPUTA" | bc`
OUTPUTC=`echo "$OUTPUTB-$OUTPUTA"| bc`
INPUTMBA=`echo $INPUTC |awk '{printf "%0.3f\n",$1/1024}'`
OUTPUTMBA=`echo $OUTPUTC |awk '{printf "%0.3f\n",$1/1024}'`
INPUT=`echo $INPUTMBA |awk '{printf "%0.3f\n",$1/1024}'`
OUTPUT=`echo $OUTPUTMBA |awk '{printf "%0.3f\n",$1/1024}'`
if [ $INPUTC -le 1048576 ];then
if [ $OUTPUTC -le 1048576 ];then
echo -e "${em[2]}_ip: ${em2_ip}\t" "${em[2]}_RX: ${em2_rx}\t" "${em[2]}_TX: ${em2_tx} " "${em[2]}_Input_Second:"${INPUTMBA}K/S" "${em[2]}_Output_Second:"${OUTPUTMBA}K/S"
else
echo -e "${em[2]}_ip: ${em2_ip}\t" "${em[2]}_RX: ${em2_rx}\t" "${em[2]}_TX: ${em2_tx} " "${em[2]}_Input_Second:"${INPUTMBA}K/S" "${em[2]}_Output_Second:"${OUTPUT}M/S"
fi
elif [ $INPUTC -gt 1048576 ];then
if [ "$OUTPUTC" -gt 1048576 ];then
echo -e "${em[2]}_ip: ${em2_ip}\t" "${em[2]}_RX: ${em2_rx}\t" "${em[2]}_TX: ${em2_tx} " "${em[2]}_Input_Second:"${INPUT}M/S" "${em[2]}_Output_Second:"${OUTPUTMBA}K/S"
else
echo -e "${em[2]}_ip: ${em2_ip}\t" "${em[2]}_RX: ${em2_rx}\t" "${em[2]}_TX: ${em2_tx} " "${em[2]}_Input_Second:"${INPUT}M/S" "${em[2]}_Output_Second:"${OUTPUT}M/S"
fi
fi
fi
echo -e "\033[34m------------------------------END-----------------------------\033[0m"

二、拷貝腳本到其他服務器

[root@slave1 monitor]# cat remote_scp.sh
#!/bin/sh
while read user ip
do
user=$user
ip=$ip
remote_cmd=/root/System_Load.sh
scp $remote_cmd $user@$ip:/home/hadoop
done < user_ip.txt

三、用戶和IP對應列表

[root@slave1 monitor]# cat user_ip.txt
root 192.168.4.91
root 192.168.4.96
root 192.168.4.45

四、遠程執行

[root@slave1 monitor]# cat remote_ssh.sh
#!/bin/sh
while read user ip
do
user=$user
ip=$ip
remote_cmd=/root/System_Load.sh
ssh -n $user@$ip $remote_cmd
done < user_ip.txt

五、結果

?

轉載于:https://www.cnblogs.com/yjt1993/p/9556131.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux下查看磁盤分區的文件系統格式

原文鏈接&#xff1a; https://www.cnblogs.com/youbiyoufang/p/7607174.html ------------------------------------------------------------------------- df -T 只可以查看已經掛載的分區和文件系統類型。 Filesystem Type 1K-blocks Used Available Use% Mounted on/dev/s…

ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)

Linux下mysql的安裝&#xff0c;真是不同Linux環境&#xff0c;各種問題。步驟&#xff1a; 1、暫停mysql服務 service mysqld stop2、設置mysql模式# mysqld_safe --usermysql --skip-grant-tables --skip-networking & 3、clone session&#xff0c;新窗口# mysql -u roo…

mysql 跳表 b 樹_簡單談談Mysql索引與redis跳表

摘要面試時&#xff0c;交流有關mysql索引問題時&#xff0c;發現有些人能夠濤濤不絕的說出B樹和B樹&#xff0c;平衡二叉樹的區別&#xff0c;卻說不出B樹和hash索引的區別。這種一看就知道是死記硬背&#xff0c;沒有理解索引的本質。本文旨在剖析這背后的原理&#xff0c;歡…

(Ajax)axios源碼簡析(三)——請求與取消請求

傳送門&#xff1a; axios源碼簡析&#xff08;一&#xff09;——axios入口文件axios源碼簡析&#xff08;二&#xff09;——Axios類與攔截器axios源碼簡析&#xff08;三&#xff09;——請求與取消請求請求過程 在Axios.prototype.request中我們看到&#xff0c;要先通過請…

Windows配置tomcat環境

1、安裝JDK 參考教程&#xff1a; https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.htmlCLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jarCLASSPATH這個環境變量一定要配好&#xff0c;否則tomcat起不來&#xff0c;直接復制上面的內容&#xff0c;…

java 抽獎 高并發處理_如何設計高并發下的抽獎?

關于抽獎,需要考慮的點有很多,這里稍微整理了下主要需要考慮以下三點:用戶抽獎次數限制獎品數量限制獎品發放的分布中獎的概率的可控性用戶抽象次數限制一個用戶必須限制抽獎的次數,而同一個用戶的并發幾率其實是很小的,所以這里可以用悲觀鎖來控制用戶的抽獎次數。獎品數量限制…

WPF圓角按鈕與觸發顏色變化

原文:WPF圓角按鈕與觸發顏色變化<Button x:Name"button1" Content"按鈕1" Margin"10,10,0,0" Cursor"Pen"><Button.Template><ControlTemplate><Border CornerRadius"15,15,15,15"><Border.Back…

咖啡豆的勵志故事

好多年前就聽過這個故事&#xff0c;以前沒感觸&#xff0c;最近特有感觸。

java bean spring_JavaBean和Spring bean傻傻分不清楚

JavaBean的定義可序列化提供無參構造提供getter/setter方法疑問在學習 Spring 的過程中發現很多 bean 對象并沒有實現 Serializable 接口或提供其他可序列化的操作。這種也叫 bean&#xff1f;或者 bean 也可以不提供序列化操作&#xff1f;解決stackoverflow 一番后&#xff0…

WPF Image Source 設置相對路徑圖片

原文:WPF Image Source 設置相對路徑圖片BitmapImage bt new BitmapImage(new Uri("Images\\3_u10484.png", UriKind.Relative));this.Img1.Source bt;

PowerDesigner V16.5 安裝教程以及漢化(數據庫建模)

原文地址&#xff1a;https://blog.csdn.net/tgbyn/article/details/72809116 ----------------------------------------------------------------------一、power designer是什么以及是干什么的&#xff1f; power designer是能進行數據庫設計的強大的軟件&#xff0c;是一款…

python調用jar字典類型_LWPCookieJar的使用-將requests存儲的cookie轉換成字典

LWPCookieJar是python中管理cookie的工具&#xff0c;可以將cookie保存到文件&#xff0c;或者在文件中讀取cookie數據到程序寫入cookie到文件from cookielib import LWPCookieJarcj LWPCookieJar()cj.set_cookie(cookielib.Cookie(version0,names_cookie[name],values_cookie…

常用的數字正則匹配

1. 數字 ^[0-9]*$2. 1-60之間的整數 /^([1-5][0-9]$)|(^[6][0]$)|(^[1-9])$/ 3. 0-60的數字&#xff0c;可以精確到小數點后2位 /^(([0-5][0-9])|[0-9]|60|(([0-9]\.\d{1,2}|[1-5][0-9]\.\d{1,2})))$/ 4. 0-1000000的整數  /^(?!00)(?:[0-9]{1,7}|1000000)$/5. 5-10000…

nginx 代理多個服務器——多個server方式

原文鏈接&#xff1a;https://blog.csdn.net/wild46cat/article/details/52997005 ------------------------------------------------------------- 配置文件下載地址&#xff1a;https://download.csdn.net/download/zengmingen/10462400nginx 代理多個服務器——多個server方…

sc openscmanager 失敗 5 mysql_如何增加windows服務

我以前也出現過你這個問題&#xff0c;用優化大師給刪了吧&#xff0c;后來也是重裝的&#xff0c;其實說是重裝也不是重裝&#xff0c;就是修復啦&#xff0c;如果你不想這樣&#xff0c;那可以試試這個&#xff0c;我沒試過用在mysql上&#xff0c;但別的到是用他加載過。讓程…

TemplatePart用法說明

原文:TemplatePart用法說明TemplatePart(Name"PART_Decrease", Typetypeof(RepeatButton)) 一直沒明白這是干嘛用的&#xff0c;搜了一下&#xff0c;記載一下。 以Button的定義為例&#xff1a; namespace System.Windows.Controls {// Summary:// Represents a…

nginx配置多個站點共用80端口

原文鏈接&#xff1a;https://blog.csdn.net/zhezhebie/article/details/73459874 --------------------------------------------- 配置文件下載地址&#xff1a;https://download.csdn.net/download/zengmingen/10462400共用80端口的&#xff0c;要server_name不同。如果用域…

兩點間最短路 java_AcWing 850. Dijkstra求最短路 II_Java實現含詳細注釋

import java.io.*;import java.util.Arrays;import java.util.Comparator;import java.util.PriorityQueue;public class Main {static final int N 150010;static int n, m; //結點數&#xff0c;邊數static int[] h, e, ne, w; //鄰接表適合表示稀疏圖,w用來存每個邊權重sta…

SQL Server如何鏈接到 Oracle并查詢其中的數據?并實現做接口

今天用Oracle的驅動教大家如何從SQL Server鏈接到Oracle. 1. 服務器上需要安裝Oracle 64位的客戶端或者服務端&#xff0c;安裝過程就省略了。不會的同學可以網上搜索一下安裝方法&#xff0c;很詳細&#xff0c;這里不贅述。 安裝完成后SQL Server的訪問接口上會新增”OraOLE…

Tomcat 內存調大

第一種方法&#xff1a;Windows下&#xff0c;在文件/bin/catalina.bat&#xff0c;Unix下&#xff0c;在文件/bin/catalina.sh的前面&#xff0c;增加如下設置&#xff1a;JAVA_OPTS-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】需要把這個兩個參數值調大。例如&#xf…