PHP+shell脚本操作Memcached和Apache Status的实例分享,memcachedapache
PHP+shell脚本操作Memcached和Apache Status的实例分享,memcachedapache
memcached 进程启动及监控
1.memcached_inc.sh
设置路径,端口等讯息。
#!/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
控制memcached 启动,停止,重启。
#!/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
监控memcached 进程,如进程失效则自动启动。
#!/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
使用方法:
./gm_memcached.sh start #启动memcached ./gm_memcached.sh stop #停止memcached ./gm_memcached.sh restart #重启memcached
shell 记录apache status并自动更新到数据库
1. 获取apache status
monitor_log.sh
#!/bin/bash #连接数 site_connects=$(netstat -ant | grep $ip:80 | wc -l) #当前连接数 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 a, 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\n" exit 0
在终端设置crontab执行
* * * * * /home/fdipzone/monitor_log.sh >> /home/fdipzone/monitor.log
2. 将apache status log 写入数据库
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); // 讀取monitor log,記錄入db,查看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文件 * @return boolean */ public function load($logfile){ // 讀取log數據 if(file_exists($logfile)){ $logdata = file_get_contents($logfile); // 清空monitor.log file_put_contents($logfile, '', true); }else{ return false; } // 正則分析數據 [#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); // 按換行分隔 $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->_dbconfig['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 ?>
在终端crontab执行
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 ;
您可能感兴趣的文章:
- PHP+shell实现多线程的方法
- php-fpm开机自动启动Shell脚本
- Shell、Perl、Python、PHP访问 MySQL 数据库代码实例
- Shell脚本中实现更新PHP5
- Shell脚本实现启动PHP内置FastCGI Server
- PHP和Shell实现检查SAMBA与NFS Server是否存在
- Ruby、PHP、Shell实现求50以内的素数
- shell脚本联合PHP脚本采集网站的pv和alexa排名
- php管理nginx虚拟主机shell脚本实例
- 监控服务器swap并重启php的Shell脚本

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
