Chinaunix首页 | 论坛 | 博客
  • 博客访问: 704943
  • 博文数量: 98
  • 博客积分: 3145
  • 博客等级: 中校
  • 技术积分: 1902
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-15 12:52
文章分类
文章存档

2021年(1)

2020年(1)

2016年(8)

2015年(3)

2014年(1)

2013年(5)

2012年(4)

2011年(9)

2010年(12)

2009年(42)

2008年(12)

我的朋友

分类: 系统运维

2010-05-17 17:43:32

nginx/squid日志分割问题
    今天需要有个问题需要对nginx的日志进行切割,发现nginx不支持"|/usr/bin/cronolog"切割,同样squid也不支持"|/usr/bin/cronolog"这种方式切割日志,在网络找到了一个好的方法,就是使用命名管道方式将日志输出到一个管道文件,之后使用脚本对管道文件进行cronolog的分割,并针对nginx写了一个脚本,控制nginx的启动,重新登陆配置文件,关闭nginx的操作(测试系统为debian).
脚本如下:
 
#!/bin/bash
#set env
LOGPATH="/home/weblogs"
CHNEL_CONF="/opt/sbin/logs/channel.conf"
SOURCLOG_DIR="/home/source_log/"
NGINX_PATH="/opt/modules/nginx/sbin/nginx"
CRONLOG="/usr/bin/cronolog"
PIPE="/home/weblogs/nginx_access_pipe"
CHANNELANME=`cat /opt/sbin/logs/channel.conf|grep -E -v "^#"|awk '{print $1}'`
IP=`cat /opt/sbin/logs/channel.conf|grep -E -v "^#"|awk '{print $4}'`
if [ ! -r ${PIPE} ]
then
mkfifo $PIPE
fi
cut_log (){
cd $LOGPATH
${CRONLOG} ${CHANNELANME}_${IP}_%Y.%m.%d_%HH_log < $PIPE &
}
stop_cut (){
ps axww|grep ${CRONLOG}|awk '{print $1}'|kill -9
}
start_nginx(){
$NGINX_PATH ;
}
reload_nginx(){
$NGINX_PATH -s reload;
}
stop_nginx(){
$NGINX_PATH -s stop;
}
case $1 in
start)
cut_log
start_nginx
;;
reload)
reload_nginx
;;
stop)
stop_nginx
stop_cut
;;
stopcut)
stop_cut
;;
startcut)
cut_log
;;
*)
echo  'please input keyword "start|stop|reload|stopcut|startcut"!'
exit 1;
;;
esac

这里需要创建一个/opt/sbin/logs/channel.conf文件,并在文件记录类似下面内容:
test.test.com 2345 nginx  127.0.0.1
附录:
mkfifo命令介绍

NAME(名称)

mkfifo - 创建FIFO(命名管道)

SYNOPSIS(总览)

mkfifo [options] file...

POSIX options(选项): [-m mode]

GNU options(选项)(最短格式): [-m mode] [--help] [--version] [--]

DESCRIPTION(描述)

mkfifo 使用指定的文件名创建FIFO(也称为"命名管道").

"FIFO"是一种特殊的文件类型,它允许独立的进程通讯. 一个进程打开FIFO文件进行写操作,而另一个进程对之进行读操作, 然后数据便可以如同在shell或者其它地方常见的的匿名管道一样流线执行.

默认情况下,创建的FIFO的模式为0666('a+rw')减去umask中设置的位.

OPTIONS(选项)

-m mode, --mode=mode
设置创建的FIFO的模式为 mode, 这可以是 (1) 中的符号模式,并使用默认模式作为起始点.

GNU STANDARD OPTIONS(GNU标准选项)

--help
在标准输出上打印一条用法信息,并以成功状态退出.
--version
在标准输出上打印版本信息,然后以成功状态退出.
--
终止选项列表.

ENVIRONMENT(环境变量)

变量LANG, LC_ALL, LC_CTYPE和LC_MESSAGES取其常用义.

CONFORMING TO(遵循规则)

POSIX 1003.2 
阅读(2572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~