Shell Script For Check Linux System Health
This night i will share for checking linux system health with shell script, this script collects system information and status like hostname, kernel version, CPU, Uptime, memory/ disk usage.
Script uses hostname, uptime, who, mpstat, lscpu, ps, top, df, free, bc commands to get system information and cut, grep, awk and sed for text processing. The output of the script is a text file which will be generated in the current directory. A variable is set to provide email address to which script can send report file. Apart from system status, the script will check a predefined threshold for cpu load and filesystem size.
Note: make sure you have all above commands working, to output all results correctly
Shell Script For Check Linux System
1
linuxsystemhealth.sh #!/bin/bash EMAIL='arief-jr@gmail.com'function sysstat {echo -e "##################################################################### Health Check Report (CPU,Process,Disk Usage, Memory)#####################################################################Hostname : `hostname`Kernel Version : `uname -r`Uptime : `uptime | sed 's/.*up \([^,]*\), .*/\1/'`Last Reboot Time : `who -b | awk '{print $3,$4}'`*********************************************************************CPU Load - > Threshold < 1 Normal > 1 Caution , > 2 Unhealthy *********************************************************************"MPSTAT=`which mpstat`MPSTAT=$?if [ $MPSTAT != 0 ]then echo "Please install mpstat!" echo "On Debian based systems:" echo "sudo apt-get install sysstat" echo "On RHEL based systems:" echo "yum install sysstat"elseecho -e ""LSCPU=`which lscpu`LSCPU=$?if [ $LSCPU != 0 ]then RESULT=$RESULT" lscpu required to producre acqurate reults"elsecpus=`lscpu | grep -e "^CPU(s):" | cut -f2 -d: | awk '{print $1}'`i=0while [ $i -lt $cpus ]do echo "CPU$i : `mpstat -P ALL | awk -v var=$i '{ if ($3 == var ) print $4 }' `" let i=$i+1donefiecho -e "Load Average : `uptime | awk -F'load average:' '{ print $2 }' | cut -f1 -d,`Heath Status : `uptime | awk -F'load average:' '{ print $2 }' | cut -f1 -d, | awk '{if ($1 > 2) print "Unhealthy"; else if ($1 > 1) print "Caution"; else print "Normal"}'`"fiecho -e "********************************************************************* Process*********************************************************************=> Top memory using processs/applicationPID %MEM RSS COMMAND`ps aux | awk '{print $2, $4, $6, $11}' | sort -k3rn | head -n 10`=> Top CPU using process/application`top b -n1 | head -17 | tail -11`*********************************************************************Disk Usage - > Threshold < 90 Normal > 90% Caution > 95 Unhealthy*********************************************************************"df -Pkh | grep -v 'Filesystem' > /tmp/df.statuswhile read DISKdo LINE=`echo $DISK | awk '{print $1,"\t",$6,"\t",$5," used","\t",$4," free space"}'` echo -e $LINE echo done < /tmp/df.statusecho -e "Heath Status"echowhile read DISKdo USAGE=`echo $DISK | awk '{print $5}' | cut -f1 -d%` if [ $USAGE -ge 95 ] then STATUS='Unhealty' elif [ $USAGE -ge 90 ] then STATUS='Caution' else STATUS='Normal' fi LINE=`echo $DISK | awk '{print $1,"\t",$6}'` echo -ne $LINE "\t\t" $STATUS echo done < /tmp/df.statusrm /tmp/df.statusTOTALMEM=`free -m | head -2 | tail -1| awk '{print $2}'`TOTALBC=`echo "scale=2;if($TOTALMEM<1024 && $TOTALMEM > 0) print 0;$TOTALMEM/1024"| bc -l`USEDMEM=`free -m | head -2 | tail -1| awk '{print $3}'`USEDBC=`echo "scale=2;if($USEDMEM<1024 && $USEDMEM > 0) print 0;$USEDMEM/1024"|bc -l`FREEMEM=`free -m | head -2 | tail -1| awk '{print $4}'`FREEBC=`echo "scale=2;if($FREEMEM<1024 && $FREEMEM > 0) print 0;$FREEMEM/1024"|bc -l`TOTALSWAP=`free -m | tail -1| awk '{print $2}'`TOTALSBC=`echo "scale=2;if($TOTALSWAP<1024 && $TOTALSWAP > 0) print 0;$TOTALSWAP/1024"| bc -l`USEDSWAP=`free -m | tail -1| awk '{print $3}'`USEDSBC=`echo "scale=2;if($USEDSWAP<1024 && $USEDSWAP > 0) print 0;$USEDSWAP/1024"|bc -l`FREESWAP=`free -m | tail -1| awk '{print $4}'`FREESBC=`echo "scale=2;if($FREESWAP<1024 && $FREESWAP > 0) print 0;$FREESWAP/1024"|bc -l`echo -e "********************************************************************* Memory *********************************************************************=> Physical MemoryTotal\tUsed\tFree\t%Free${TOTALBC}GB\t${USEDBC}GB \t${FREEBC}GB\t$(($FREEMEM * 100 / $TOTALMEM ))%=> Swap MemoryTotal\tUsed\tFree\t%Free${TOTALSBC}GB\t${USEDSBC}GB\t${FREESBC}GB\t$(($FREESWAP * 100 / $TOTALSWAP ))%"}FILENAME="health-`hostname`-`date +%y%m%d`-`date +%H%M`.txt"sysstat > $FILENAMEecho -e "Reported file $FILENAME generated in current directory." $RESULTif [ "$EMAIL" != '' ] then STATUS=`which mail` if [ "$?" != 0 ] then echo "The program 'mail' is currently not installed." else cat $FILENAME | mail -s "$FILENAME" $EMAIL fifi
This Screenshot
More Result
#####################################################################
Health Check Report (CPU,Process,Disk Usage, Memory)
#####################################################################Hostname : p4rk3r
Kernel Version : 4.4.0
Uptime : 1:31
Last Reboot Time : 2016-01-19 19:58*********************************************************************
CPU Load - > Threshold < 1 Normal > 1 Caution , > 2 Unhealthy
*********************************************************************CPU0 : 8.55
CPU1 : 7.74
CPU2 : 11.00
CPU3 : 10.78Load Average : 0.97
Heath Status : Normal
*********************************************************************
Process
*********************************************************************=> Top memory using processs/application
PID %MEM RSS COMMAND
1728 17.6 685860 /usr/bin/firefox
1376 6.0 234020 /usr/bin/plasmashell
1370 2.3 91564 kwin_x11
1159 2.1 83220 /usr/libexec/Xorg
1980 2.0 80424 /usr/lib64/firefox-43.0.4/plugin-container
2014 1.7 69360 /usr/bin/dolphin
1373 1.6 64584 /usr/bin/krunner
1344 1.6 63032 kded5
1463 1.2 50544 /usr/bin/kget
1525 1.2 48980 /usr/bin/knotify4=> Top CPU using process/application
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1344 slacker+ 20 0 1389492 63032 52068 S 6.2 1.6 0:04.13 kded5
1728 slacker+ 20 0 8051624 685860 81972 S 6.2 17.6 26:26.04 firefox
2240 root 20 0 0 0 0 S 6.2 0.0 0:07.03 kworker/u8+
1 root 20 0 4376 1396 1300 S 0.0 0.0 0:00.63 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+
7 root 20 0 0 0 0 S 0.0 0.0 0:02.24 rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0*********************************************************************
Disk Usage - > Threshold < 90 Normal > 90% Caution > 95 Unhealthy
*********************************************************************tmpfs /run 1% used 1.9G free space
devtmpfs /dev 0% used 1.9G free space
/dev/sda2 / 23% used 50G free space
tmpfs /dev/shm 1% used 1.9G free space
cgroup_root /sys/fs/cgroup 0% used 1.9G free space
cgmfs /run/cgmanager/fs 0% used 100K free space
/dev/sda3 /home 78% used 42G free space
/dev/sda4 /media/mydata 27% used 144G free space
Heath Status
tmpfs /run Normal
devtmpfs /dev Normal
/dev/sda2 / Normal
tmpfs /dev/shm Normal
cgroup_root /sys/fs/cgroup Normal
cgmfs /run/cgmanager/fs Normal
/dev/sda3 /home Normal
/dev/sda4 /media/mydata Normal*********************************************************************
Memory
*********************************************************************=> Physical Memory
Total Used Free %Free
3.70GB 1.08GB 1.39GB 37%
=> Swap Memory
Total Used Free %Free
3.99GB 0GB 3.99GB 100%
Maybe that my explain for write Shell Script, and i’m still learning for this script can be said iam newbie. So if you want learning, please. Because learning not need younger, smart or experience and other the most important we still understand.
“There is a will there is a way”
Thanks, may be useful and good luck!!!