Shell幫你掌管上千臺服務(多執行緒)

2022-09-15 01:21:10 字數 3058 閱讀 2568

日常伺服器運維時,我們都會批量管理多台伺服器。

指令碼,批量化,使我們工作中必不可少的。

首先我們需要一台堡壘機,負責免秘鑰的登入和分發任務等等

堡壘機到主機

需要一套ssh-keygen來管理

:授權金鑰

id_rsa  

:私鑰id_rsa.pub  

:公鑰known_hosts

:連線過機器記錄資訊,不需要屬於

「yes」  

這些都是前面基礎環境和工作。

這個指令碼是最初始化的,可以遠端過去執行任務,並列印結果

#/bin/bash  

start_time=`date +%s`

for i in `cat /opt/wei/pam_ip.txt` #ip存放的檔案

do

cc="ssh deployer@$i \"sudo cat /etc/ssh/sshd_config | grep -ev '^#' | grep usepam\" "

kk=`echo $cc|bash`

if [ ! -n "$kk" ]; then

echo "ip: $i usepam no seting"

sudo echo "ip: $i usepam no seting" >> /opt/wei/pam_no.txt

else

echo "ip: $i $kk"

sudo echo "ip: $i $kk" >> /opt/wei/pam_yes.txt

fi

done

end_time=`date +%s`

executing_time=`expr $end_time - $start_time`

echo "***************=end********************="

echo "程式執行時長:$executing_time s"

#/bin/bash  

start_time=`date +%s`

for i in `cat /opt/wei/pam_ip.txt`

do

& done

wait

end_time=`date +%s`

executing_time=`expr $end_time - $start_time`

echo "***************=end********************="

echo "程式執行:$executing_time s"

使用

'&'+wait

實現

多程序

實現

執行很快,而且很不老實(順序都亂了,大概是因為expr運算所花時間不同)

解析:這乙個指令碼的變化是在命令後面增加了&標記,意思是將程序扔到後台。在shell中,後台命令之間是不區分先來後到關係的。所以各後台子程序會搶奪資源進行運算。

wait

命令:wait

[n]n

表示當前shell中某個執行的後台命令的pid,wait命令會等待該後台程序執行完畢才允許下乙個shell語句執行;如果沒指定則代表當前shell後台執行的語句,wait會等待到所有的後台程式執行完畢為止。

如果沒有wait,後面的shell語句是不會等待後台程序的,一些對前面後台程序有依賴關係的命令執行就不正確了

nproc=20 #最大併發程序數

function pushque

function genque

function chkque

for i in `cat /opt/wei/pam_ip.txt`

do

& sleep 0.1 #考慮有序,開啟這個引數,速度優先,則注釋掉

pid=$!

pushque $pid

while [[ $nrun -ge $nproc ]]; do # 如果nrun大於nproc,就一直chkque

chkque

sleep 0.1

done

done

wait

echo -e "time-consuming: $seconds seconds" #顯示指令碼執行耗時#!/bin/bash

使用模擬佇列來控制程序數量

要控制後台同一時刻的程序數量,需要在原有迴圈的基礎上增加管理機制。

乙個方法是以for迴圈的子程序pid做為佇列元素,模擬乙個限定最大程序數的佇列(只是乙個長度固定的陣列,並不是真實的佇列)。佇列的初始長度為0,迴圈每建立乙個程序,就讓佇列長度+1。當佇列長度到達設定的併發程序限制數之後,每隔一段時間檢查佇列,如果佇列長度還是等於限制值,那麼不做操作,繼續輪詢;如果檢測到有併發程序執行結束了,那麼佇列長度-1,輪詢檢測到佇列長度小於限制值後,會啟動下乙個待執行的程序,直至所有等待執行的併發程序全部執行完。

定義20執行緒,速度從原來的311s,降到40s,大大提高效率

降龍十八掌

人身陽氣集於督脈 氣入丹田,通長強 走腰俞 腰陽關 命門 懸樞 脊中 中樞筋縮 至陽 靈台 神道 身柱 陶道 大椎 啞門 風府 腦戶 強間 後頂 百會前頂 顖會 上星 神庭 素髎 水溝 兌端 齦交.走手太陰肺經 至中府 雲門 天府 俠白 尺澤 孔最 列缺 經渠至掌心.此式為簡單威猛一式,左腿微屈,右...

掌大 關注回覆

掌大這個關注回覆可以回覆許多資訊,設計挺人性化的,例如關注回覆純文字資訊的話,可以不用考慮編寫 實現類似於 您是第幾個關注本平台 的訊息。這裡我已經基本設定好了,暫缺對詳細功能的補充。記憶力不好,老是忘了功能名字 這裡我就不贅述了,有興趣的可以參照掌大幫助文件 文字回覆 單 關注回覆 這裡我基本已經...

清華集訓2015 靜態仙人掌 仙人掌剖分

毒瘤仙人掌,明明放到樹上一道板題的非要構造到仙人掌上來出題orz orz orz orz orz 在oi的上古時代,流傳著這樣乙個故事 有一天,小w到森林裡遊玩,回來之後跟小v說,我發現好多棵會動的樹耶!小v說,這有什麼好稀奇的,我用手指頭就能維護每棵樹的形態。於是又過了幾天小w到沙漠裡遊玩,回來之...