
複数のLinuxサーバー(2000+)の合計メモリと合計スワップ領域を見つけるためのスクリプトを作成する必要があります。私は信頼できるサーバーを持っており、パスワードなしで2000台のサーバーすべてにログインできます。
このスクリプトを実行すると、次の出力が提供されるはずです。
Server total memory swap
redhat1
redhat2
redhat3
...
redhat2000
この目標をどのように達成できますか?
答え1
この/proc/meminfo
ファイルには必要な情報が含まれています。分析するのも簡単です。
これにより、RAMとスワップが提供されます(私が知っているすべてのシステムでこの順序で、kB単位)。
awk '/^(MemTotal|SwapTotal)/{print $2}' /proc/meminfo
フォーマットするには:
printf "%s\t%d\t%d\n" $(hostname) \
$(awk '/^(MemTotal|SwapTotal)/{print $2}' /proc/meminfo)
これをSSHと組み合わせるには:
for host in your_list_of_servers ; do
printf "%s\t%d\t%d\n" $host \
$(ssh $host "awk '/^(MemTotal|SwapTotal)/{print \$2}' /proc/meminfo")
done
答え2
まず、パスワードのないログインを設定する必要があります。以下を参照してください。これページ。
その後、要件に応じて次のスクリプトを使用できます。
#!/bin/bash
# store username:ip combo here separated by a whitespace
_pair="[email protected] [email protected] [email protected]"
for e in $_pair
do
# extract user and ips for each $e in $_pair
IFS='@'
set -- $e
_user="$1"
_ip="$2"
sleep 2
echo "Connecting to server '${_ip}' via SSH..."
ssh ${_user}@${_ip} "free -m | awk -v h=$HOSTNAME '(/Mem/||/Swap/){printf("%s\t%s%d\t",h,$1,$2)}'; echo -e"
done