Close Menu
    Facebook X (Twitter) Instagram
    • Download Cisco Packet Tracer
    Facebook X (Twitter) Instagram Pinterest Vimeo
    IT Beginner
    • Home
    • Server
    • WordPress
    IT Beginner
    Home»Uncategorized»Tracking centos server with bash script
    Uncategorized

    Tracking centos server with bash script

    29/07/2017No Comments4 Mins Read

    In this article I will show you how to use bash shell to test the system periodically, to check the connection port 80, server load, queue exim, and mysql process … The script will automatically notify you via email if there are anything unusual.

    Script will use a while loop to run every 2 minutes and check whether the case is running on the server. To run periodically, you can use command : crontab or screen

    Note:

    In this tutorial I will use screen on CentOS 6 (x64):

    1. Install screen

    Tools screen will help you to run multiple sessions on a terminal session and keep it alive unless you cancel or restart the server.
    This utility is most effective when you want to install a program, and take the time that you are connecting to a remote ssh.

    – To install screen you just use yum command:

    # yum install screen -y

    – To create a new session you use the command :screen -S Name_sesion_or_jobs

    # screen -S monitor

    – To exit the current screen, and work continues:
    Press Ctr + A + D

    – To list the session created by the screen:

     # screen -ls
    You should see
    [root@Mysql02 ~]# screen -ls
    There are screens on:
    29823.mysql_moniter     (Detached)
    21871.pts-0.Mysql02     (Attached)
    2 Sockets in /var/run/screen/S-root.

    2. Run script on screen

    – You create a file (moniter.sh) with the code below : (don’t forget to set your email address below “### Send mail alert and attachments log file” line near the end of the file.

    #!/bin/bash
    ## Moniter server v1 http://www.namhuy.net
    pass="namhuy"
    server=`uname -a|awk {'print $2'}`
    ps_view=`ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5`
    ps_view2=`ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5`
    echo -n "Password: "
    read -s password
    clear
    echo "Server Moniter"
    if [ $password != $pass ] ; then
    echo "Wrong password"
    exit
    else
    
    ### File Logs
    log="log2.txt"
    num_load=1
    while true
    do
    echo "### Load $num_load ####" >> $log
    num_load=$(($num_load+1))
    echo -n "**** load: " >> $log
    load1=`w|grep load`
    
    ### Tracking number php process
    num_php=`ps aux|grep php|grep -v root|wc -l`
    w|grep load >> $log
    echo "**** Process php" >> $log
    echo  "**** Nummber process php: $num_php" >> $log
    ps aux|grep php|grep -v root >> $log
    
    ### Print top process
    echo  "**** Top Process: $ps_view" >> $log
    
    ### Print number connect port 80
    echo -n "***** Connect Port 80:" >> $log
    netstat -an|grep :80|wc -l >> $log
    
    ### Print top 5 IP connect port 80
    echo "***** Top 5 Ip" >> $log
    netstat -an|grep :80 |awk '{print $5}'|cut -d":" -f1|sort|uniq -c|sort -n|tail -n 5 >> $log
    i=`w|grep load|sed s/average:/*/|cut -d*  -f2|cut -c1-3| sed -e 's/\.//g'` ## Number the current load of server
    load=10 # Default load, if the server load is greater than (10), the script will send mail alerts.
    if [ $i -lt $load ]; then
    echo "**** Load  $i" >> $log
    echo "**** ok" >> $log
    else
    echo "*** Load $i" >> $log
    echo "**** Not oke" >> $log
    echo  "**** Top Process: $ps_view" >> $log
    echo  "**** Top Process: $ps_view2" >> $log
    
    Send mail alert and attachments log file
    echo "**** $load1 - Load Current: $i"|mail -s "$server" [email protected] < $log ### Conducting the service startup if you want service httpd restart service mysql restart echo "*** Service restarted" >> $log
    fi
    echo "-------------------" >> $log
    ## will check every 2 minute
    sleep 120
    done
    fi

    – Set execute permissions(only run via root):

    # chmod 0700 moniter.sh

    – Create a new session with the moniter name:

    # screen -S moniter

    – At the command prompt, run the script with password: namhuy

    # ./moniter.sh

    You should see

    [root @ Mysql02 ~] #./moniter.sh
    Password:

    – You can view logs at: log2.txt in your email if your server load is greater than 10

     

     

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleHow to secure Apache HTTP Web Server
    Next Article How to secure Nginx web server

    Related Posts

    Uncategorized

    fds

    30/01/2019
    Uncategorized

    What Makes Linux the Most Adopted Operating System

    05/08/2017
    Tips – Tricks

    Browse web in linux via terminal with w3m and xterm

    29/07/2017
    Subscribe
    Notify of
    guest

    guest

    This site uses Akismet to reduce spam. Learn how your comment data is processed.

    0 Comments
    Oldest
    Newest Most Voted
    Inline Feedbacks
    View all comments
    Tags
    apache centos Centos 6 cuda Desktop Environment dual boot environment featured gnome GUI hostname hosts intel kernel kill lamp server lemp server life MariaDB netflix nginx nvidia password php-fpm phpmyadmin pids processes s.m.a.r.t Security session solid state drive ssd ssh ssh server tag 1 tag 2 Ubuntu upgrade varnish VirtualBox VNC Server web server window manager wordpress xfce
    Facebook X (Twitter) Instagram Pinterest

    Type above and press Enter to search. Press Esc to cancel.

    wpDiscuz