我試圖創建一個腳本,從不同的遠程服務器獲取服務狀態:
我試圖創建一個腳本,從不同的遠程服務器獲取服務狀態。
#!/bin/bash
USERNAME=vagrant
isengine=(server1 server2 server3 server4 server5)
isengine_services=( ds.rc DFDServer ISFAgents ODFEngine)
for h in "${isengine[@]}"/span>
do
echo "${h}" >> test.txt
for i in "${isengine_services[@]}"/span>
do
sshpass -p "mysecret" ssh -o StrictHostKeyChecking=no "${USERNAME}"@"${h}" "echo${i}; systemctl status ${i} | grep Active" >> tmp. txt
done
done done
cat tmp.txt
我得到非常混亂的輸出,看起來像這樣:
我得到非常混亂的輸出。
server1
ds.rc
活動:自2021-09-13 10:04:48 CEST周一起活動(運行);3天前
淘寶網
活躍:自2021-09-13 10:05:02 CEST起活躍(運行);3天前
淘寶網
活躍:自2021-09-13 10:04:46 CEST起活躍(運行);3天前
淘寶網
Active: active (running) since Mon 2021-09-13 10:04:20 CEST; 3 days ago
是否可以讓它看起來像下面這樣:
server1
ds.rc Active: active (running) since Mon 2021-09-13 10:04:48 CEST; 3 days ago
DFDServer 活躍:自2021-09-13 10:05:02 CEST起活躍(運行);3天之前
ISFAgents Active: active (running) since Mon 2021-09-13 10:04:46 CEST; 3 days ago
ODFEngine Active: active (running) since Mon 2021-09-13 10:04:20 CEST; 3 days ago
uj5u.com熱心網友回復:
你可以使用GNU AWK將雙行代碼轉換為單行代碼,如下所示,讓file.txt內容為
server1
ds.rc
活動:自2021-09-13 10:04:48 CEST周一起活動(運行);3天前
淘寶網
活躍:自2021-09-13 10:05:02 CEST起活躍(運行);3天前
淘寶網
活躍:自2021-09-13 10:04:46 CEST起活躍(運行);3天前
淘寶網
Active: active (running) since Mon 2021-09-13 10:04:20 CEST; 3 days ago
然后
awk '{ORS=NR%2?"
":" "; print}' file.txt
輸出
server1
ds.rc Active: active (running) since Mon 2021-09-13 10:04:48 CEST; 3 days ago
DFDServer 活躍:自2021-09-13 10:05:02 CEST起活躍(運行);3天之前
ISFAgents Active: active (running) since Mon 2021-09-13 10:04:46 CEST; 3 days ago
ODFEngine Active: active (running) since Mon 2021-09-13 10:04:20 CEST; 3 days ago
解釋一下。如果當前行的數字(NR)是奇數(即除以2的余數是非零),那么就列印這一行,然后換行,否則使用空格(condition?value1:value2是AWK的三元運算子,如果滿足條件就使用value1,否則就使用value2)。換句話說,就是將每一個偶數行和隨后的行之間用空格連接起來。
(在gawk 4.2.1中測驗)
uj5u.com熱心網友回復:
你可以通過這個來設定服務變數:
isengine_services=( ds.rc DFDServer ISFAgents ODFEngine)
要這樣:
isengine_services="ds.rc DFDServer ISFAgents ODFEngine"/span>
并替換內部回圈:
for i in "${isengine_services[@]}"
do
sshpass -p "mysecret" ssh -o StrictHostKeyChecking=no "${USERNAME}"@"${h}" "echo${i}; systemctl status ${i} | grep Active" >> tmp. txt
done>
用這個:
echo $h > > tmp.txt
sshpass -p "mysecret" ssh -o StrictHostKeyChecking=no "${username}"@"${h}" "systemctl status $isengine_services" > > tmp. txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309905.html
標籤:
