構成ファイルを使用したファイルシステムの監視

構成ファイルを使用したファイルシステムの監視

シェルスクリプトを使用してファイルシステムスペースを監視しようとしています。スクリプトは、警告状態制約を含む構成ファイルを参照する必要があります。構成ファイルは次のとおりです。

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(( ))elifelseif

  • もともとはインクルードマウントラインだけを除外しました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)を比較することもできます。

おすすめ記事