システム監視スクリプト


1. httpdが停止していたら自動起動

# /usr/bin/ps ax | grep -v grep | grep -q httpd || /usr/bin/systemctl start httpd.service
■実行と同時にメールを送信する場合
/usr/bin/ps ax | grep -v grep | grep -q httpd || (/usr/bin/systemctl start httpd.service && (echo 'Sent from www.example.jp' | mail -s 'Started httpd service.' xxxx@example.jp))
 
※このコマンドをcronで定期実行します。

2. ディスク使用率の監視

ディスクの使用率がしきい値を超えていたら、メールを送信します。
ここでは2つのパーティションを監視していますが、1つの場合は「Partition1」のみにし、また3つ以上の場合は項目をコピーして設定値を作成して下さい。
#!/bin/bash

#================================================================
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Notification email address.
MAIL_ADDRESS="xxxx@example.jp"
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Get server information.
SERVER_NAME=`hostname`
EXECUTION_DATETIME=`date`
DISK_USAGE=`df -h`
 
# Email sending information.
EMAIL_SUBJECT="[${SERVER_NAME}] Disk space usage rate alert!!"
EMAIL_SERVER_INFO1="ServerName:${SERVER_NAME}"
EMAIL_SERVER_INFO2="date:${EXECUTION_DATETIME}"
EMAIL_SERVER_INFO3="Disk usage:"
EMAIL_SERVER_INFO4="${DISK_USAGE}"
#================================================================

error_flag=0
 
#///////////////////// Partition1 check //////////////////////////
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Partition to monitor.
MONITORING_PARTITION1=/dev/mapper/cl-root
 
# Disk space usage rate(%).
THRESHOLD_VALUE1=80
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Check Disk.
USED_CAPACITY1=` df -h | grep $MONITORING_PARTITION1 | awk '{ print $5 }' | sed -e '$s/.$//' `
 
# Checkthreshold_value.
if [ $USED_CAPACITY1 -gt $THRESHOLD_VALUE1 ]
  then
    error_flag=1
    EMAIL_MESSAGE1="'${MONITORING_PARTITION1}' exceeded [${THRESHOLD_VALUE1}]%."
  else
    EMAIL_MESSAGE1=""
fi
#/////////////////////////////////////////////////////////////////

 
#///////////////////// Partition2 check //////////////////////////
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Partition to monitor.
MONITORING_PARTITION2=/dev/vda1
 
# Disk space usage rate(%).
THRESHOLD_VALUE2=80
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Check Disk.
USED_CAPACITY2=` df -h | grep $MONITORING_PARTITION2 | awk '{ print $5 }' | sed -e '$s/.$//' `
 
# Checkthreshold_value.
if [ $USED_CAPACITY2 -gt $THRESHOLD_VALUE2 ]
  then
    error_flag=1
    EMAIL_MESSAGE2="'${MONITORING_PARTITION2}' exceeded [${THRESHOLD_VALUE2}]%."
  else
    EMAIL_MESSAGE2=""
fi
#/////////////////////////////////////////////////////////////////

 
##################################################################
# If the threshold has been exceeded.
if [ $error_flag -eq 1 ]
  then
    mail -s "$EMAIL_SUBJECT" $MAIL_ADDRESS << EOM
=============================================================
$EMAIL_SUBJECT
=============================================================
$EMAIL_MESSAGE1
$EMAIL_MESSAGE2
-------------------------------------------------------------
$EMAIL_SERVER_INFO1
$EMAIL_SERVER_INFO2
$EMAIL_SERVER_INFO3
$EMAIL_SERVER_INFO4
EOM
fi
##################################################################

3. ディスク使用状況レポート

ディスクの使用状況をメールで送信します。
#!/bin/bash

TODAY_DATE_VAL="$(date "+%Y-%m-%d")"
TODAY_DATE_VAL2="$(date "+%Y-%m-%d  %H:%M:%S")"
#==============================================
REPORT_FILENAME=/tmp/disk_usage.txt
#----------------------------------------------
EMAIL_TO="xxxxx@example.jp"
EMAIL_FROM="webmaster@example.jp"
EMAIL_SUBJECT="[${HOSTNAME}] ディスク使用状況レポート($TODAY_DATE_VAL)"
#==============================================

echo "${HOSTNAME}" > $REPORT_FILENAME
echo "【ディスク使用状況】[ $TODAY_DATE_VAL2 ]" >> $REPORT_FILENAME
echo "" >> $REPORT_FILENAME
 
df -hT | grep root | awk '{print "ディスク容量:" $3 "\n使用容量:" $4 "\n使用%:" $6}' >> $REPORT_FILENAME
 
/usr/bin/sleep 1
 
mail -s "$EMAIL_SUBJECT" -r $EMAIL_FROM $EMAIL_TO < $REPORT_FILENAME
※「EMAIL_TO」、「EMAIL_FROM」には実際のメールアドレスを書き換えて下さい。


最終更新:2023年10月12日 07:48