シェルスクリプトを使用してファイルシステムスペースを監視しようとしています。スクリプトは、警告状態制約を含む構成ファイルを参照する必要があります。構成ファイルは次のとおりです。
FileSYSTEM WARNING CRITICAL
/dev/sda5 80 90
/dev/sda3 50 70
/dev/sda2 60 75
/dev/sda1 75 80
tmpfs 70 75
したがって、スクリプトを実行するたびに、df -Phの使用率をそのプロファイルと比較し、それに応じて警告(または)重要なメールをトリガーする必要があります。
私が試したスクリプトは次のとおりです。
#!/bin/ksh
HOST=`hostname`
DATE=`date`
LOGDIR=/home/oracle/files/logs
CONFIG_FILE=/home/oracle/files/template
FILESYSTEM=`mount -l | egrep -v 'root'| awk '{print $3}'`
for i in $FILESYSTEM
do
df -Ph $i > ($LOGDIR)\FS.log
sed -e '/Filesystem/d' -e 's/\%/ /g' ${LOGDIR}/FS.log > ${LOGDIR}/FS1.log
SPACEUSED=$(awk '{print $5}' ${LOGDIR}/FS1.log)
while read -r line
do
FS_TEMPLATE=`awk {'print $1'}`
if ($i == $FS_TEMPLATE)
then
WARNING_LIMIT=`awk {'print $3'}`
CRITICAL_LIMIT=`awk {'print $2'}`
if ($SPACEUSED == $CRITICAL_LIMIT)
then
echo ' mail criticality'
elseif ($SPACEUSED -ge $WARNING_LIMIT)
then
echo 'waning'
fi
fi
done < $CONFIG_FILE
done
# Remove temporary work files.
rm -f ${LOGDIR}/FS.log
rm -f ${LOGDIR}/FS1.log
# End of Script
しかし、うまくいきません。どのように実装できますか?
答え1
これ失敗するたとえば、フィールドを選択してみましたか?
CRITICAL_LIMIT=`awk {'print $2'}`
どんなアドバイスも提供しません。明らかにOR( ksh bash zsh から)がawk
欲しく、if構文が正しくありません。算術比較が必要で、文字列比較にはまったく異なることが必要です。もっと不器用なもの:echo $line|
<<<$line
((
))
elif
elseif
もともとはインクルードマウントラインだけを除外しました
root
。ルートファイルシステムのスペース使用量を監視したいと思います。ただし、今日、ほとんどすべてのシステムには保存されていない複数のファイルシステムがあるため、監視するスペース使用量はありません。/proc
一般的に、/sys
または/dev
それらのいくつか、時には異なる場合もあります。ファイルシステムを指定せずに実行すると、意味df
のあるすべての操作が実行されます。より良いことは、設定ファイルのファイルシステムにのみ興味があるので、それがすべてだということです。read
各行ごとにぎこちなく分けようとしていますが、いつawk
無料read
にできますか?使用量がしきい値と等しい場合にのみテストしようとしています。たとえば、「/dev/sda5」が79%から81%に急速に増加すると、ロジックは80%で警告を発行しません。人々は使用量が達したときに通知を受けたいと思っています。またはそれ以上しきい値。
{
中かっこはシェル(少なくともほとんどのシェル)の特殊文字であり、予期しない望ましくない結果が発生する可能性があるため、スクリプトでは引用符で囲む必要があります。しかし、場合によってはそうではありません。}
awk
そして実際には何もメールで送信しようとしませんでしたが、これは通常システムと環境によって異なりますので、これについてはあなたに任せます。
私が望むすべてを適用してください:
#!/bin/ksh
CONFIG_FILE=/home/oracle/files/template
<$CONFIG_FILE while read filesys warn crit; do
used=$( df -Ph "$filesys" | awk 'NR>1 {sub(/%/,"",$5);print $5}' )
if (($used >= $crit)); then echo critical $used% on $filesys
elif (($used >= $warn)); then echo warning $used% on $filesys; fi
done
または、%
フィールド5を維持し、を使用して切り捨てられた値${used%\%}
(6対6)を比較することもできます。