PHP + shell script for Memcached and Apache Status instances, memcachedapache

Source: Internet
Author: User

PHP + shell script for Memcached and Apache Status instances, memcachedapache

Memcached process initiation and monitoring
1. memcached_inc.sh
Set the path, port, and other information.

#!/bin/sh  #config include  HOST=$(hostname) SITE="mysite" PORT=11211  MEMCACHED_PID_FILE="/tmp/memcached.pid" MEMCACHED_DAEMON_PID_FILE="/tmp/memcached_daemon.pid"  MEMCACHED="memcached -d -m 64 -p $PORT -u memcache -l 127.0.0.1 -P $MEMCACHED_PID_FILE" MEMCACHED_DAEMON_FILE="memcached_daemon.sh"  ERROR_LOG_FILE="${ROOT}/memcached_${SITE}_${HOST}_${PORT}.log" 

2. gm_memcached.sh
Control memcached startup, stop, and restart.

#!/bin/sh  #memcached start and stop #$1 action  ROOT=$(cd "$(dirname "$0")"; pwd)  . ${ROOT}/memcached_inc.sh   start() {   if [ -f "$MEMCACHED_PID_FILE" ] && [ -s "$MEMCACHED_PID_FILE" ]; then   printf "memcached already running\n"  else   printf "starting memcached\n"   $MEMCACHED    sleep 2    PID=$(cat $MEMCACHED_PID_FILE)   printf "memcached is started PID:$PID\n"    printf "starting memcached daemon\n"   ${ROOT}/${MEMCACHED_DAEMON_FILE} &   DAEMON_PID=$!   echo ${DAEMON_PID} > ${MEMCACHED_DAEMON_PID_FILE}   printf "memcached daemon is started PID:${DAEMON_PID}\n"  fi  }   stop() {   if [ -f "$MEMCACHED_DAEMON_PID_FILE" ] && [ -s "$MEMCACHED_DAEMON_PID_FILE" ]; then   DAEMON_PID=$(cat $MEMCACHED_DAEMON_PID_FILE)   rm -f ${MEMCACHED_DAEMON_PID_FILE}   if [ ! -z ${DAEMON_PID} ]; then    kill -9 ${DAEMON_PID}   fi   printf "memcached daemon is stopped\n"  else   printf "no memcached daemon running\n"  fi   sleep 1   if [ -f "$MEMCACHED_PID_FILE" ] && [ -s "$MEMCACHED_PID_FILE" ]; then   PID=$(cat $MEMCACHED_PID_FILE)   rm -f ${MEMCACHED_PID_FILE}   if [ ! -z ${PID} ]; then    kill -9 ${PID}   fi   printf "memcached is stopped\n"  else   printf "no memcached running\n"  fi  }   case "$1" in   start)   start   ;;   stop)   stop   ;;   restart)   stop   sleep 3   start   ;;   *)   printf "Usage:$0 {start|stop|restart}\n"   exit 1  esac  exit 0 

3. memcached_daemon.sh
Monitor memcached processes. If the process fails, it is automatically started.

#!/bin/sh  #memcached daemon  ROOT=$(cd "$(dirname "$0")"; pwd)  . ${ROOT}/memcached_inc.sh   while : do  if [ -f "$MEMCACHED_PID_FILE" ] && [ -s "$MEMCACHED_PID_FILE" ]; then   PID=$(cat $MEMCACHED_PID_FILE)  else   PID=""  fi    if [ -z "$PID" ] || [ -z $(ps aux|awk '{print $2}' | grep "^$PID$") ]; then   $MEMCACHED   sleep 1   printf "[$(date +%Y-%m-%d' '%H:%M:%S)] ${SITE} ${HOST} memcached ${PORT} is restarted\n" >> $ERROR_LOG_FILE   echo "Subject: ${SITE} ${HOST} memcached ${PORT} is restarted $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail me@gmail.com  fi   sleep 5  done  exit 0 

Usage:

./Gm_memcached.sh start # start memcached./gm_memcached.sh stop # stop memcached./gm_memcached.sh restart # restart memcached


The shell records apache status and automatically updates it to the database.
1. Obtain apache status
Monitor_log.sh

#! /Bin/bash # Number of connections site_connects =$ (netstat-ant | grep $ ip: 80 | wc-l) # current number of connections site_cur_connects =$ (netstat-ant | grep $ ip: 80 | grep EST | wc-l) # apache apache_speed = $ (netstat-n | awk '/^ tcp/{++ S [$ NF]} END {for (a in S) print, S [a]} ') printf "[# start #] \ n $ (date' + % Y-% m-% d % H: % M: % s ') \ n "printf" connects :$ {site_connects} \ n "printf" cur connects :$ {site_cur_connects} \ n "printf" apache_speed: \ n $ {apache_speed} \ n [# end #] \ n "exit 0

Set crontab on the terminal for execution

* * * * * /home/fdipzone/monitor_log.sh >> /home/fdipzone/monitor.log 

2. Write apache status log to the database
Save_monitor_log.php

<? Php $ logfile = dirname (_ FILE __). '/monitor. log'; $ dbconfig = array ('host' => '192. 168.1.100 ', 'username' => 'username', 'Password' => 'Password', 'dbname' => 'mydb ', 'tabname' => 'Monitor _ log'); $ obj = new SaveMonitorLog ($ dbconfig, 'myweb'); $ obj-> load ($ logfile ); // retrieve the monitor log from the listener, record the listener into the db, and view the db class SaveMonitorLog {// class start private $ _ apache_state = array ('time _ wait', 'close _ wait ', 'syn _ SENT ', 'Syn _ recv', 'fin _ wait1', 'fin _ wait2', 'established', 'last _ ack', 'closing '); private $ _ dbconfig = array (); private $ _ site = null;/** init */public function _ construct ($ dbconfig = array (), $ site = 'web') {if (! Isset ($ dbconfig ['host']) |! Isset ($ dbconfig ['username']) |! Isset ($ dbconfig ['Password']) |! Isset ($ dbconfig ['dbname']) |! Isset ($ dbconfig ['tabname']) {$ this-> debug ('dbconfig error');} $ this-> _ dbconfig = $ dbconfig; $ this-> _ site = $ site; $ this-> connectdb ();} /** load data * @ param String $ logfile log File * @ return boolean */public function load ($ logfile) {// retrieve log data if (file_exists ($ logfile) {$ logdata = file_get_contents ($ logfile); // clear the monitor. log file_put_contents ($ logfile, '', true);} else {return false;} // positive analysis data Else [# start #] * [# end #] preg_match_all ('/# start #(.*?) # End #.*? /Si', $ logdata, $ data); if (isset ($ data [1]) & count ($ data [1])> 0) {$ alldata = $ data [1]; foreach ($ alldata as $ val) {$ indb = $ this-> parser ($ val ); $ newid = $ this-> addtodb ($ indb) ;}}/ ** parser data * @ param Array $ data * @ return Array */private function parser ($ data) {$ indb = array (); $ tmp = explode (chr (10), $ data ); // separate $ indb ['SITE'] = $ this-> _ site; $ indb ['addtime'] = $ tmp [1]; $ indb ['connects'] = Array_pop (explode (':', $ tmp [2]); $ indb ['cur _ CTS '] = array_pop (explode (':', $ tmp [3]); for ($ I = 5, $ max = count ($ tmp)-2; $ I <$ max; $ I ++) {list ($ key, $ num) = explode ('', $ tmp [$ I]); if (in_array ($ key, $ this-> _ apache_state )) {$ indb [$ key] = $ num;} return $ indb;}/** connect db */private function connectdb () {$ conn = @ mysql_connect ($ this-> _ dbconfig ['host'], $ this-> _ dbconfig ['username'], $ this-> _ db Config ['Password']) or die (mysql_error (); mysql_select_db ($ this-> _ dbconfig ['dbname'], $ conn) or die (mysql_error ();}/** add to db */private function addtodb ($ indb) {$ insertkey = ''; $ insertval = ''; if ($ indb) {foreach ($ indb as $ key => $ val) {$ insertkey. = $ insertkey? ",". $ Key: $ key; $ insertval. = $ insertval? ",'". Mysql_escape_string (trim ($ val )). "'":"'". mysql_escape_string (trim ($ val )). "'";} $ sqlstr = "insert ". $ this-> _ dbconfig ['tabname']. "($ insertkey) values ($ insertval)"; $ query = @ mysql_query ($ sqlstr) or die (mysql_error (); $ id = mysql_insert_id (); return $ id? $ Id: false ;}/ ** debug */private function debug ($ msg) {exit ($ msg. "\ r \ n") ;}// class end?>

Run crontab on the terminal.

0 0 * * * php /home/fdipzone/save_monitor_log.php 

 
Table monitor_log struct

CREATE TABLE IF NOT EXISTS `monitor_log` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `site` varchar(20) NOT NULL,  `connects` int(10) unsigned NOT NULL DEFAULT '0',  `cur_connects` int(10) unsigned NOT NULL DEFAULT '0',  `TIME_WAIT` int(10) unsigned NOT NULL DEFAULT '0',  `CLOSE_WAIT` int(10) unsigned NOT NULL DEFAULT '0',  `SYN_SENT` int(10) unsigned NOT NULL DEFAULT '0',  `SYN_RECV` int(10) unsigned NOT NULL DEFAULT '0',  `FIN_WAIT1` int(10) unsigned NOT NULL DEFAULT '0',  `FIN_WAIT2` int(10) unsigned NOT NULL DEFAULT '0',  `ESTABLISHED` int(10) unsigned NOT NULL DEFAULT '0',  `LAST_ACK` int(10) unsigned NOT NULL DEFAULT '0',  `CLOSING` int(10) unsigned NOT NULL DEFAULT '0',  `addtime` datetime NOT NULL,  PRIMARY KEY (`id`),  KEY `connects` (`connects`),  KEY `cur_connects` (`cur_connects`),  KEY `TIME_WAIT` (`TIME_WAIT`),  KEY `CLOSE_WAIT` (`CLOSE_WAIT`),  KEY `SYN_SENT` (`SYN_SENT`),  KEY `SYN_RECV` (`SYN_RECV`),  KEY `FIN_WAIT1` (`FIN_WAIT1`),  KEY `FIN_WAIT2` (`FIN_WAIT2`),  KEY `ESTABLISHED` (`ESTABLISHED`),  KEY `LAST_ACK` (`LAST_ACK`),  KEY `CLOSING` (`CLOSING`),  KEY `addtime` (`addtime`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; 
Articles you may be interested in:
  • PHP + shell Multithreading
  • Php-fpm automatically starts Shell script upon startup
  • Accessing MySQL database code instances using Shell, Perl, Python, and PHP
  • Update PHP5 in Shell script
  • Use Shell scripts to start PHP built-in FastCGI Server
  • Check whether SAMBA and NFS Server exist in PHP and Shell.
  • Evaluate the prime number of less than 50 in Ruby, PHP, and Shell implementations
  • Shell scripts and PHP scripts are used to collect the pv and alexa rankings of websites.
  • Php manages nginx VM shell script instances
  • Monitor the server swap and restart the php Shell script

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.