Jenkins の各 macOS ノードでストレージ不足の警告をしたい。
macOS で df
コマンドを使用して、ルートディレクトリ /
の空き容量を取得し、それをGB単位で表示するシェルスクリプトの例を以下に示します。
スクリプト
#!/bin/bash -xe
# ルートディレクトリの空き容量を取得し、ギガバイト単位で計算
available_kb=$(df -k / | tail -n 1 | awk '{print $4}')
available_gb=$(echo "scale=2; $available_kb / 1024 / 1024" | bc)
# 判定と出力
if (( $(echo "$available_gb >= 50" | bc -l) )); then
echo "空き容量は ${available_gb} GB です。50GB 以上あります。"
else
echo "空き容量は ${available_gb} GB です。50GB 未満です。"
fi
解説
-
df -k /
コマンドを使用してルートディレクトリの空き容量をキロバイト単位で取得します。 -
tail -n 1
でヘッダー行を除外し、空き容量の値だけを取得します。 -
awk '{print $4}'
で空き容量の値を抽出します。4列目が空き容量のため$4
を指定しています。GNU の df コマンドなら--output=avail
で空き容量だけが出力されます。 -
echo
とbc
を使用して空き容量をキロバイトからギガバイトに変換します。scale=2
なので小数点以下2桁まででます。 - 空き容量が50GB以上か未満かを判定し、適切なメッセージを出力します。
利用
出力の部分をチャット通知にしました。警告は無視されがちなので、警告メッセージには具体的にどう対処すればいいのかを記載するようにしました。未来のメンバーだったり自分だったりに期待です。
シェルスクリプトのみなので各ノードに実行環境を用意しなくていいのが好きポイントです。