Linux下管理Memcached的Service脚本

Memcached 的编译安装过程请参考本站的《Linux下部署Memcached和PHP的Memcache扩展方法

如 Memcached 已在 Linux 中安装完毕,且被部署到 /usr/local/memcached 这个路径下,接下来我们来开始为其安装用于启动和停止的服务管理脚本。

首先,通过 vi 在 /etc/rc.d/init.d 路径下新建一个名为 memcached 的脚本文件,命令如下:

vi /etc/rc.d/init.d/memcached

然后,向其中写入 Shell 脚本如下:

#!/bin/sh  
#  
# chkconfig: 2345 90 50
# description: Memcached Service Daemon
#
# processname: Memcached
#
# Source function library.
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
#[ ${NETWORKING} = "no" ] && exit 0
#[ -r /etc/sysconfig/dund ] || exit 0
#. /etc/sysconfig/dund
#[ -z "$DUNDARGS" ] && exit 0

MEMCACHED="/usr/local/memcached/bin/memcached"

start()
{
    echo -n $"Starting Memcached: "
    daemon $MEMCACHED -u daemon -d -m 32 -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
    echo
}
stop()
{
    echo -n $"Shutting down Memcached: "
    killproc memcached
    echo
}

[ -f $MEMCACHED ] || exit 1
# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

保存退出 vi 后,执行下面的命令来安装这个脚本

chmod 777 /etc/rc.d/init.d/memcached
chkconfig --add memcached
chkconfig --level 235 memcached on

然后可以通过下面的命令来检查是否安装成功

chkconfig --list | grep memcached
service memcached start
service memcached stop
service memcached restart

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

开源消息队列MemcacheQ在Linux中编译安装教程

队列(Queue)是一种常用的数据结构。在队列这种数据结构中,最先插入的元素将会最先被取出;反之最后插入的元素将会最后被取出,因此队列又称为“先进先出”(FIFO:First In First Out)的线性表。

加入元素的一端叫“队尾”,取出元素的一端叫“队头”。利用消息队列可以很好地异步处理数据的传送和存储,当遇到频繁且密集地向后端数据库中插入数据时,就可采用消息队列来异步处理这些数据写入。

MemcacheQ是一款基于Memcache协议的开源消息队列服务软件,由于其遵循了Memcache协议,因此开发成本很低,不需要学习额外的知识便可轻松掌握。

我在最近的一个项目中也应用了MemcacheQ,下面我将分享一下MemcacheQ在Linux中的编译和安装过程。

首先,MemcacheQ依赖于BerkeleyDB和Libevent,如果服务器中曾经安装过Memcached,那么Libevent应该已经存在了,否则就需要先下载安装Libevent。

下载链接如下:

Libevent:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
Berkeley DB:http://download.oracle.com/otn/berkeley-db/db-6.0.30.tar.gz
MemcacheQ:https://github.com/stvchu/memcacheq

安装Libevent

tar zvxf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent
make && make install
echo "/usr/local/libevent/lib" >> /etc/ld.so.conf
ldconfig

安装BerkeleyDB

BerkeleyDB简介:BerkeleyDB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤。

MemcacheQ依赖BerkleyDB用于队列数据的持久化存储,以免在MemcacheQ意外崩溃或中断时,队列数据不会丢失。

tar zxvf db-6.0.30.tar.gz
cd db-6.0.30/build_unix
../dist/configure --prefix=/usr/local/berkeleydb
make && make install
ln -s /usr/local/berkeleydb/lib/libdb-6.0.so /usr/lib/
echo "/usr/local/berkeleydb/lib/" >> /etc/ld.so.conf
ldconfig

安装MemcacheQ

tar zxvf memcacheq-0.2.0.tar.gz
cd memcacheq-0.2.0
./configure --prefix=/usr/local/memcacheq --with-bdb=/usr/local/berkeleydb --with-libevent=/usr/local/libevent --enable-threads
make && make install

启动MemcacheQ

/usr/local/memcacheq/bin/memcacheq -d -uroot -r -l 127.0.0.1 -p11210 -H /usr/local/mcq -N -R -v -L 1024 -B 1024 > /usr/local/mcq/logs/mcq_error.log 2>&1

附:MemcacheQ参数

-p <num>      TCP监听端口(default: 22201)
-U <num>      UDP监听端口(default: 0, off)
-s <file>     unix socket路径(不支持网络)
-a <mask>     unix socket访问掩码(default 0700)
-l <ip_addr>  监听网卡
-d            守护进程
-r            最大化核心文件限制
-u <username> 以用户身份运行(only when run as root)
-c <num>      最大并发连接数(default is 1024)
-v            详细输出 (print errors/warnings while in event loop)
-vv           更详细的输出 (also print client commands/reponses)
-i            打印许可证信息
-P <file>     PID文件
-t <num>      线程数(default 4)

用PHP测试一下

<?php
$mcq = new Memcache;
$mcq->connect('127.0.0.1', 11210) or die ('Connect Error!');
for ($i=1; $i<=5; $i++) {
    memcache_set($mcq, 'k', $i, 0, 0);
}
for ($i=1; $i<=6; $i++) {
    $queue = memcache_get($mcq, 'k');
    if ($queue === false) {
        echo "null\n";
    } else {
        echo $queue."\n";
    }
}

memcache_close($mcq);
?>

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

在Linux中用Shell脚本完成SVN版本库的建立

每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下:

#!/bin/bash
# by www.sunbloger.com

echo -n "Enter SVN name :"
read svn_name
/usr/bin/svnadmin create /svnroot/$svn_name
if [ $? -eq 0 ]; then
    
    # svnserve.conf
    sed -i 's/# anon-access = read/anon-access = none/g' /svnroot/$svn_name/conf/svnserve.conf
    sed -i 's/# auth-access = write/auth-access = write/g' /svnroot/$svn_name/conf/svnserve.conf
    sed -i 's/# password-db = passwd/password-db = \/svnroot\/conf\/passwd/g' /svnroot/$svn_name/conf/svnserve.conf
    sed -i 's/# authz-db = authz/authz-db = authz/g' /svnroot/$svn_name/conf/svnserve.conf
    
    # authz
    cat > /svnroot/$svn_name/conf/authz<<EOF
[groups]
developer = jason
[/]
@developer = rw
EOF

fi

阳光部落原创,更多内容请访问http://www.sunbloger.com/

在Linux/CentOS中编译安装Python

心血来潮,想学习一下Python,听说用来做爬虫还不错。先从运行环境开始入手,CentOS中已经内置了Python,但版本似乎比较老,通过python -V命令看到版本是2.4.3。目前Python 2.x的最新版本号是2.7.8,那么就开始动手升级一下。

首先,下载源码包,命令如下:

wget --no-check-certificate https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

这里需要特别注意一下,因为下载网址是https开头的,所以要给wget命令加上–no-check-certificate参数。

下载好源码包后,解压:

tar -zxvf ./Python-2.7.8.tgz

解压出Python-2.7.8这个目录后,我们开始对源码进行编译:

cd Python-2.7.8
./configure --prefix=/usr/local/python
make
make install

编译安装完成后,要替换掉系统自带的Python,但CentOS的yum依赖于Python工作,为了保证yum的正常运行,我们要在替换前,先将自带的Python更名备份,方法如下:

mv /usr/bin/python /usr/bin/python-2.4.3
ln -s /usr/local/python/bin/python /usr/bin/python

上面两行命令执行完后,可以分别用“python -V”和“/usr/bin/python-2.4.3 -V”来验证部署是否成功,正确的结果应该是2.7.8和2.4.3。

最后,要修改yum,让其运行指向旧的版本:

vi /usr/bin/yum

将第一行中的“#!/usr/bin/python”修改为“#!/usr/bin/python-2.4.3”,保存即可。

 

阳光部落原创,更多内容请访问http://www.sunbloger.com/

搭建rsync同步机制 解决测试和生产环境的文件同步问题

rsync是类unix系统下的数据镜像备份工具——remote sync。是一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。

通过搭建rsync服务端和客户端,可轻松解决开发中遇到的测试环境与生产环境的文件同步问题,且同步过程完全自动化,避免了人工上传文件容易出现的错传或漏传现象。

下面我们一起来看一下设置的过程。

生产环境主机(rsync服务端)设置

1.配置rsyncd.conf文件

阅读更多

在Linux中将目录压缩打包为zip文件 并通过ftp上传的Shell脚本

下面的shell脚本是将/opt下yyyymmdd格式的目录压缩打包为bak_yyyymmdd.zip,并通过ftp上传到192.168.0.2上的bak目录下。

#!/bin/sh
root='/opt'
t=`date +%Y%m%d`
d="$root/$t"
if [ -d "$d" ]; then
    zip -r bak_$t $t/*
fi
ftp -v -n 192.168.0.2 << EOF
user ftpuser pw123
binary
hash
cd /bak
lcd $root
prompt
mput bak_$t.zip
bye
EOF

阳光部落原创,更多内容请访问http://www.sunbloger.com/

Cacti数据采集周期修改为一分钟一次的方法

Cacti Logo

Cacti 默认的数据采集周期是5分钟一次,这对于监控业务繁忙的系统来说似乎过于漫长了,一些突发状况很难在第一时间发现,所以我们需要缩短这个周期。

首先,先登录 Cacti,进入 console > Settings > Poller 界面,将 Poller Interval Cron Interval 均改为 “Every Minute” 选项,然后点击 Save 按钮保存。

然后,进入 Linux,修改 crontab 中的数据采集脚本运行周期为*/1 * * * *,例如:

*/1 * * * * /usr/local/php/bin/php /htdocs/cacti/poller.php > /dev/null 2>&1

最后,回到 Cacti,进入 console > Data Templates 界面,修改所用到的数据模板,将 Step 设为60,这里的单位是秒。

完成上述三个步骤后,还需要我们手工清理历史数据后 Cacti 才能正常采集数据和显示图表。

进入 console > System Utilities 界面,点击 “Rebuild Poller Cache”

至此我们已经成功将 Cacti 的数据采集周期由5分钟一次修改为1分钟一次了。

如果不能正常显图表,可尝试手工清除 cacti/rra 目录下的 rrd 文件。

转载请注明:阳光部落原创,更多内容请访问http://www.sunbloger.com/

使用Cacti监控Linux服务器网卡流量的配置方法

Cacti Logo

Cacti 是一套基于PHP、MySQL、SNMP和RRDTool开发的网络流量监测图形分析工具。

若希望使用 Cacti 监控 Linux 服务器的网卡流量,需要在被监控的 Linux 服务器上安装 net-snmp-utils 相关软件包,我们可以通过 yum 在线安装,例如:
yum install net-snmp-utils

安装好 net-snmp-utils 后,在被监控的服务器上编辑/etc/snmp/snmpd.conf文档
vi /etc/snmp/snmpd.conf
在其中添加下面这行命令
view systemview included .1.3.6.1.2.1.2

2013-03-27_01

保存并重新 snmpd 服务
service snmpd restart

然后,我们进入cacti,添加被监控的服务器

阅读更多

按小时切割Nginx日志的Shell脚本

在公司服务器上的Nginx日志是每天切割一次,随着访问量的上升,每天产生的日志体积也随之变大。

正好最近要开发一个对Nginx日志分析的工具,借此机会把公司服务器上Nginx日志的切割时间间隔调整为一个小时,用于切割日志的Shell脚本如下:

#!/bin/bash
# Every hour running time.
# by Jason.wei.

# The Nginx logs path
log_year=$(date +"%Y")
log_month=$(date +"%m")
log_day=$(date +"%d")
log_hour=$(date +"%H")
logs_path="/usr/local/nginx/logs/"
save_path="/usr/local/nginx/logs/$log_year-$log_month/$log_day/"

if [ ! -d "$save_path" ]; then
mkdir -p "$save_path"
fi

mv ${logs_path}access.log ${save_path}access_${log_year}${log_month}${log_day}_${log_hour}.log

if [ $log_hour = 00 ]; then
mv ${logs_path}error.log ${save_path}error_$log_year$log_month$log_day.log
fi

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

Linux下的NFS配置方法

NFS 是 Network File System 的简写,即网络文件系统。

网络文件系统是 Linux 支持的文件系统中的一种,也被称为NFS。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

下面来介绍一下 NFS 的配置。

假设有2台 Linux 服务器,IP地址分别为 192.168.0.1 和 192.168.0.2,我们希望将 192.168.0.1 作为 Server 端,把其 /home/public 目录共享给作为客户端的 192.168.0.2,方法如下:

阅读更多