イマドキWebサービスの監視について考えてみるのエントリで、メインプロダクトの監視を2016年下期に実施する、と書きました。
その中で、監視をしているといろいろな不具合にも気づくわけで。
Diskがいっぱいになりやすいなら定期的に消せばいいじゃない!とか、
Nagios使ってるなら将来的にはeventhandlerも使えたらいいじゃない!とか、
色々なことを日々考えていたりするわけです。
今回、cronからも起動でき、eventhandlerからも使えそうなfree upスクリプトを書いたので、
試しにコードをQiita上に晒すという暴挙に出てみようと思います。
※どうでもいいけど「ディスクを空ける」が"free up"なのも今回知りました。
作成スクリプト
Bashの猛者な皆様の厳しいご指摘をお待ちしています。
なお、保存日数とpathを内部に持っているのは、注入できるようにすると、権限によっては大事故になるからです。
起動方法
- cronから
/path/to/nagios-plugins/eventhandlers/free_up_local_disk.sh --from-cron
- Nagiosから
/path/to/nagios-plugins/eventhandlers/free_up_local_disk.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
実コード
free_up_local_disk.sh
#!/bin/bash -u
#
# Event handler script for free up local disk
#
# Note: This script will only free up the server if the service is
# retried 3 times (in a "soft" state) or if the service somehow
# manages to fall into a "hard" error state.
#
#---------------------------------------
# constants
#---------------------------------------
path=/path/to/target
mtime=200
#---------------------------------------
# for free up
#---------------------------------------
freeup()
{
echo "Free up disk space by removing junk files..."
find ${path} -type f -mtime +${mtime} -exec rm -rf {} \;
return 0
}
#---------------------------------------
# from cron
#---------------------------------------
if [ $# -eq 1 ] && [ "${1}" = "--from-cron" ]; then
freeup
exit 0
fi
#---------------------------------------
# arguments
#---------------------------------------
# invalid
if [ $# -lt 3 ]; then
echo "Nothing to do..."
exit 0
fi
# valid
SERVICESTATE=${1}
STATETYPE=${2}
SERVICEATTEMPT=${3}
case "${SERVICESTATE}" in
OK)
;;
UNKNOWN)
;;
*)
case "${STATETYPE}" in
SOFT)
if [ ${SERVICEATTEMPT} -ge 3 ]; then
freeup
fi
;;
HARD)
freeup
;;
esac
;;
esac
exit 0
おしまい。