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/

在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中将目录压缩打包为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/

按小时切割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系统中自动备份MySQL数据库的Shell脚本

下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行。在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩。需要注意的是,这段脚本仅适用数据一致性要求不高的环境。

#!/bin/bash
mysql_pwd="password"
mysql_dump="/usr/local/mysql/bin/mysqldump"
cur_year=$(date +"%Y")
cur_month=$(date +"%m")
cur_day=$(date +"%d")
dump_path="/usr/backup/mysql/$cur_year-$cur_month/$cur_day"
arr_tables=(
"table_1"
"table_2"
"table_3"
)
if [ ! -d "$dump_path" ]; then
mkdir -p "$dump_path"
fi
for cur_table in ${arr_tables[*]}; do
$mysql_dump -uroot -p$mysql_pwd --opt mydb $cur_table | gzip > $dump_path/$cur_table.sql.gz
done

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

Nginx日志切割方法

这是一段Linux的Shell脚本,用于切割Nginx的日志,可通过crontab设置每日零点执行这段脚本实现自动切割。

#!/bin/bash
# This script run at 00:00

log_year=$(date -d "yesterday" +"%Y")
log_month=$(date -d "yesterday" +"%m")
log_day=$(date -d "yesterday" +"%d")

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"
save_path="/usr/local/nginx/logs/$log_year-$log_month/"

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
mv ${logs_path}error.log ${save_path}error_$log_year$log_month$log_day.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

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

定时处理MySQL超时Locked进程的Shell脚本

最近一段时间,我刚刚进入一家新公司,并接手了这里的一个站点,由于这个站点的架构设计不太合理,导致MySQL的压力始终很大,经常出现超时的Locked进程,于是编写了一段Linux的Shell脚本来定时kill掉这些进程。

脚本如下:

#!/bin/bash
mysql_pwd="xxxxxx" #mysql的root密码
mysql_exec="/usr/local/mysql/bin/mysql"
tmp_dir="/tmp"
file_sh="$tmp_dir/mysql_kill_locked.sh"
file_tmp="$tmp_dir/mysql_kill_locked.tmp"
file_log="$tmp_dir/mysql_kill_locked.log" #日志
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" > $file_tmp
cat $file_tmp >> $file_log
for line in `cat $file_tmp | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $file_sh
done
chmod +x $file_sh
sh $file_sh #执行临时脚本
> $file_sh #清空临时脚本

最后,将这段脚本加入到crontab,定时执行即可。

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