巡检脚本
#!/bin/shMY_VERSION="1.0Beta"
# maintain_report.sh - Generate a system maintain check up report about a Linux machine
#
# Set path
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin
# Specify custom (source) script, if used
CUSTOM_SCRIPT="/usr/local/sbin/sr_custom_script"
echo "$(date +'%Y-%m-%d %k:%M:%S') Status report v$MY_VERSION for $HOSTNAME"
echo "Written by Arno van Amersfoort"
echo "--------------------------------------------------"
uname -a
free
uptime
export TERM=vt100; /usr/bin/top -b -n 1 |grep -i '^CPU'
if [ -e /proc/mdstat ]; then
echo ""
echo "---------------"
echo "| RAID status |"
echo "---------------"
# if [ -x /sbin/mdadm ]; then
# /sbin/mdadm --detail --scan 2>&1
# echo ""
# fi
FAIL=0
DEGRADED=0
MISMATCH=0
while read LINE; do
printf "$LINE"
if [ -n "$(echo "$LINE" |grep 'active raid')" ]; then
DEV="$(echo "$LINE" |awk '{ print $1 }')"
printf " (mm_cnt=$(cat /sys/block/$DEV/md/mismatch_cnt)"
# Mismatch fixing (repair) doesn't work yet with current 2.6.18 kernel, so no use in reporting errors :-S
# if [ "$(cat /sys/block/$DEV/md/mismatch_cnt)" != "0" ]; then
# MISMATCH=$(($MISMATCH +1))
# printf " (WARNING: Unsynchronised (mismatch) blocks!)"
# fi
if [ -n "$(echo "$LINE" |grep '\(F\)')" ]; then
FAIL=$(($FAIL + 1))
printf " (WARNING: FAILED DISK(S)!)"
fi
if [ -n "$(echo "$LINE" |grep '\(S\)')" ]; then
printf " (Hotspare(s) available)"
else
printf " (NOTE: No hotspare?!)"
fi
fi
if [ -n "$(echo "$LINE" |grep 'blocks')" ]; then
if [ -n "$(echo "$LINE" |grep '_')" ]; then
DEGRADED=$(($DEGRADED + 1))
printf " (DEGRADED!!!)"
fi
fi
echo ""
done < /proc/mdstat
if [ $FAIL -gt 0 ]; then
echo ""
echo "** WARNING: $FAIL MD(RAID) array(s) have FAILED disk(s)! **"
fi
if [ $DEGRADED -gt 0 ]; then
echo ""
echo "** WARNING: $DEGRADED MD(RAID) array(s) are running in degraded mode! **"
fi
if [ $MISMATCH -gt 0 ]; then
echo ""
echo "** WARNING: $MISMATCH MD(RAID) array(s) have unsynchronized (mismatch) blocks! **"
fi
fi
echo ""
echo "---------------------"
echo "| S.M.A.R.T. status |"
echo "---------------------"
if which smartctl 2>&1 >/dev/null; then
cat /proc/partitions |grep -e "sd.$" -e "sd. " -e "hd.$" -e "hd. " |awk '{ print $4 }' |while read HDD; do
printf "/dev/$HDD: "
# Explicity turn on SMART on device:
smartctl -q silent -s on /dev/$HDD
# smartctl -H -l error /dev/$HDD |tail -n5 |grep -v -e "^$" -e"Version" -e "Device does not support" -e "Enable Save with"2>&1
smartctl -H /dev/$HDD |grep -v -e '^$' |tail -n1 2>&1
done
else
echo "smartctl binary not found (smartmontools not installed?)"
fi
echo ""
echo "------------------"
echo "| DiskSpace info |"
echo "------------------"
DF_WARNING=0
#Set IFS to EOL
IFS='
'
#IFS=$'\n'
for LINE in `df -h -P -l -T --sync`; do
echo -n "$LINE"
if [ -n "$(echo "$LINE" |grep -v "Use%")" ]; then
free_perc=`echo "$LINE" |awk '{ print $6 }' |sed s,'%',,`
if [ $free_perc -gt 90 ]; then
echo ' (At or near max. capacity!)'
DF_WARNING=1
fi
fi
echo ""
done
if [ "$DF_WARNING" = "1" ]; then
echo ""
echo "** WARNING: One or more filesystems are at or near maximum capacity! **"
fi
if [ -d /var/log/fsck ]; then
echo ""
echo "------------------"
echo "| Fsck boot logs |"
echo "------------------"
cat /var/log/fsck/*
fi
echo ""
echo "--------------------"
echo "| Hardware sensors |"
echo "--------------------"
if which sensors 2>&1 >/dev/null; then
# Re-read configuration:
if [ -n "$(sensors -s )" ]; then
echo "** WARNING: Unable to read hardware sensors (/etc/sensors.conf incorrect/missing?) **"
else
result=`sensors 2>&1`
echo "$result"
if [ -n "$(echo "$result" |grep -e "ALARM")" ]; then
echo ""
echo "** WARNING: One or more sensors show ALARM! **"
fi
fi
else
echo "sensors binary not found (lm-sensors not installed?)"
fi
echo ""
echo "-----------------------"
echo "| Kernel warnings log |"
echo "-----------------------"
KERNEL_LOG="kwarnings.log"
if [ ! -f "/var/log/$KERNEL_LOG" ]; then
echo "/var/log/$KERNEL_LOG does NOT exist. Consider adding a line like"
echo "'kern.warn /var/log/$KERNEL_LOG' to your syslog.conf"
else
cat "/var/log/$KERNEL_LOG.0" >"/tmp/$KERNEL_LOG" 2>/dev/null
cat "/var/log/$KERNEL_LOG" >>"/tmp/$KERNEL_LOG"
filesize=$(ls -l "/tmp/$KERNEL_LOG" |awk '{ print $5 }')
if [ $filesize -eq 0 ]; then
echo "(Empty)"
else
cat "/tmp/$KERNEL_LOG"
fi
# Remove temp file
rm -f "/tmp/$KERNEL_LOG"
# Remove log files
rm -f "/var/log/$KERNEL_LOG.1" 2>/dev/null
mv "/var/log/$KERNEL_LOG.0" "/var/log/$KERNEL_LOG.1" 2>/dev/null
mv "/var/log/$KERNEL_LOG" "/var/log/$KERNEL_LOG.0" 2>/dev/null
printf "" >|"/var/log/$KERNEL_LOG"
fi
echo ""
echo "------------------------"
echo "| Available OS Updates |"
echo "------------------------"
if which apt-get 2>&1 >/dev/null; then
# apt-get update -q=2 2>&1
echo "** Testing what packages could be upgraded: **"
# apt-get upgrade -u --download-only -y -q -V 2>&1
else
echo "apt-get binary not found (apt-get not installed?)"
fi
echo ""
echo "-------------------"
echo "| Chkrootkit info |"
echo "-------------------"
if which chkrootkit 2>&1 >/dev/null; then
chkrootkit -q >/tmp/chkrootkit_output.txt 2>&1
if [ -n "$(cat /tmp/chkrootkit_output.txt)" ]; then
cat /tmp/chkrootkit_output.txt
else
echo "Nothing found"
fi
rm -f /tmp/chkrootkit_output.txt
else
echo "chkrootkit binary not found (chkrootkit not installed?)"
fi
if which clamscan 2>&1 >/dev/null; then
echo ""
echo "-----------------"
echo "| ClamAV status |"
echo "-----------------"
# Show clam version:
clamscan --version 2>&1
# Dummy run to see whether we're not out-of-date:
echo "" |clamscan --quiet - 2>&1
fi
if [ -e /var/log/backup.log ]; then
echo ""
echo "---------------"
echo "| Backup info |"
echo "---------------"
cat /var/log/backup.log
fi
if [ -e "$CUSTOM_SCRIPT" ]; then
. "$CUSTOM_SCRIPT"
fi
页:
[1]