Php+shell script Operations memcached and Apache status instance sharing, Memcachedapache
memcached process Start-up and monitoring
1.memcached_inc.sh
Set the path, port and other messages.
#!/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 "
2.gm_memcached.sh
Control memcached Start, stop, restart.
#!/bin/sh #memcached start and stop #$1 action root=$ (CD "$ (dirname") "; pwd"). ${root}/memcached_inc.sh Start () {if [-f] $MEMCACHED _pid_file "] && [-S" $MEMCACHED _pid_file "]; then PRI ntf "Memcached already running\n" Else printf "starting memcached\n" $MEMCACHED sleep 2 pid=$ (cat $MEMCACHED _pi D_file) printf "memcached is started PID: $PID \ n" printf "starting memcached daemon\n" ${root}/${memcached_daemon_fi LE} & daemon_pid=$! Echo ${daemon_pid} > ${memcached_daemon_pid_file} printf "MEMCACHED DAEMON is started pid:${daemon_pid}\n" fi} s Top () {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 was stopped\n" else printf "no memcached running\n" fi} case "$" I n 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 the memcached process, such as process failure, and start automatically.
#!/bin/sh #memcached Daemon root=$ (cd "$ (dirname") "; 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 $} ' | 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
How to use:
Shell records Apache status and updates to database automatically
1. Get Apache Status
monitor_log.sh
#!/bin/bash #连接数 site_connects=$ (netstat-ant | grep $ip: | wc-l) #当前连接数 site_cur_connects=$ (netstat-ant | grep $i p:80 | grep EST | wc-l) #apache apache_speed=$ (netstat-n | awk '/^tcp/{++s[$NF]} END {for (A-in S) print A, S[a]} ') printf "[#star t#]\n$ (date ' +%y-%m-%d%h:%m:%s ') \ nthe "printf" connects:${site_connects}\n "printf" cur connects:${site_cur_connects}\n "printf" apache_speed:\n${apache_speed}\n[#end #]\n\n "
Crontab execution in Terminal setup
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 ', ' db ' Name ' = ' mydb ', ' tabname ' = ' monitor_log '); $obj = new Savemonitorlog ($dbconfig, ' myweb '); $obj->load ($logfile); Read monitor log, record in db, view 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 ($dbconf ig[' 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) {//read log according to if (File_exists ($logfile)) {$logdata = File_get_co Ntents ($logfile); Empty Monitor.log file_put_contents ($logfile, ", true); }else{return false; }//The analysis of the numbers [#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), $data); separated by line $indb [' site '] = $this->_site; $indb [' addtime '] = $tmp [1]; $indb [' connects '] = Array_pop (Explode (': ', $tmp [2])); $indb [' cur_connects '] = 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->_dbcon fig[' username '), $this->_dbconfig[' 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 into". $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?>
Execute at Terminal crontab
Table Monitor_log struct
CREATE TABLE IF not EXISTS ' Monitor_log ' (' id ' int (ten) unsigned NOT NULL auto_increment, ' site ' varchar () is not NULL, ' Connects ' int (ten) unsigned NOT null default ' 0 ', ' cur_connects ' int (ten) unsigned NOT null default ' 0 ', ' time_wait ' int ( unsigned NOT NULL default ' 0 ', ' close_wait ' int (ten) unsigned NOT null default ' 0 ', ' syn_sent ' int (ten) unsigned not N ULL default ' 0 ', ' syn_recv ' int (ten) unsigned NOT null default ' 0 ', ' fin_wait1 ' int (ten) unsigned NOT null default ' 0 ', ' Fin_wait2 ' int (unsigned) not null default ' 0 ', ' established ' Int (ten) unsigned NOT null default ' 0 ', ' last_ack ' int (10 ) unsigned NOT NULL default ' 0 ', ' CLOSING ' int (ten) 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 ' CLOS E_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 Method of implementing multithreading
- PHP-FPM boot automatically starts shell script
- Shell, Perl, Python, PHP access MySQL database Code instance
- Implementing update PHP5 in shell scripts
- Shell script Implementation launches PHP built-in fastcgi Server
- PHP and Shell implementations check if Samba and NFS server exist
- Ruby, PHP, Shell implementations for a prime number within 50
- Shell Script Federated php script capture site PV and Alexa rankings
- PHP Management Nginx Virtual Host Shell script instance
- Monitor server swap and restart PHP shell script
http://www.bkjia.com/PHPjc/1108606.html www.bkjia.com true http://www.bkjia.com/PHPjc/1108606.html techarticle Php+shell script Operations memcached and Apache status instance sharing, Memcachedapache memcached process Start-up and monitoring 1.memcached_inc.sh set the path, port and other messages. #!/bin/sh #conf ...