linux中日志的自动切割和删除

例子一

/script/cut_log.phps会自动切割Nginx的Web访问日志。默认会保存7天的日志,根据硬盘空间情况调整,尽可能的保存多一些的日志。这个日志很重要,比如网站运行异常,或者网站被黑,日志都是很重要的检测途径。

/script/del_log.sh会每天自动删除其他非重要日志。

cron计划任务规则在下面这个文件中:
/etc/cron.d/yundaiwei

内容如下:

##### delete web logs
0 0 * * * root /script/cut_log.phps &>/dev/null

##### delete error logs
0 0 * * * root /script/del_log.sh &>/dev/null

例子二

昨天做了一个可以定期自动删除的脚本。

#!/bin/bash
find /usr/local/nginx/logs/ -mtime +15 -type f -name \*.log | xargs rm -f
上述脚本是将nginxlogs下面的15天之前的日志文件删除,可以参考上面的脚本删除其他程序(如PHP、Tomcat)的日志文件。不过使用脚本的时候需要将Nginx的日志文件进行自动分割,否则会删除正在写入的日志文件了,Nginx日志分割脚本可以见 Linux下源码方式安装Nginx和PHP(FastCGI) 或者 CentOS系统初始安装MySQL、PHP和Nginx的脚本。

将脚本保存并使用chmod +x 命令指定可执行权限,最好还需要加入任务列表中(每天凌晨一点执行):

[root@localhost ~]# crontab -e
00 01 * * * /bin/bash /root/shell/autodellogs.sh
[root@localhost ~]# service crond restart

例子三

上在介绍不够详细我人来看一篇详细的

说明:

操作系统:CentOS

站点1:www.111cn.net

站点2:m.111cn.net

Nginx安装路径:/usr/local/nginx

Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf

站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf

站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.osyunwei.com.conf

目的:

1、对站点1和站点2的nginx访问日志按天保存,日志路径为:

站点1:/usr/local/nginx/logs/nginx_logs/bbs_logs

站点2:/usr/local/nginx/logs/nginx_logs/sns_logs

2、只保留30天以内的日志记录

具体操作:

1、创建日志存放路径

mkdir -p  /usr/local/nginx/logs/nginx_logs/bbs_logs

mkdir -p  /usr/local/nginx/logs/nginx_logs/sns_logs

2、设置Nginx日志记录格式

vi /usr/local/nginx/conf/nginx.conf  #编辑

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

取消日志记录格式前面的注释,在最后添加一行,如下所示:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"'

'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time';  #新添加的一行

:wq!  #保存退出

3、设置虚拟主机配置文件

vi /usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf  #编辑,在bbs.osyunwei.com;这一行下面添加

access_log  logs/bbs_access.log  main;  #注意这里的main要和上一步中的main一致

:wq!  #保存退出

vi /usr/local/nginx/conf/vhost/sns.osyunwei.com.conf  #编辑,在sns.osyunwei.com;这一行下面添加

access_log  logs/sns_access.log  main;  #注意这里的main要和上一步中的main一致

:wq!  #保存退出

service nginx reload  #重新加载nginx配置文件

4、创建Nginx日志切割脚本

vi /home/crontab/cut_nginx_log.sh  #编辑

#!/bin/sh

logs_path="/usr/local/nginx/logs/"

DAYS=30

mv ${logs_path}bbs_access.log  ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%Y%m%d").log

mv ${logs_path}sns_access.log  ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%Y%m%d").log

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

find ${logs_path}nginx_logs/bbs_logs/  -name "bbs_access_*" -type f -mtime +$DAYS -exec rm {} \;

find ${logs_path}nginx_logs/sns_logs/  -name "sns_access_*" -type f -mtime +$DAYS -exec rm {} \;

:wq!  #保存退出

chmod +x /home/crontab/cut_nginx_log.sh  #添加脚本执行权限

5、添加任务计划,修改/etc/crontab

vi /etc/crontab   #在最后一行添加

0 0 * * * root /home/crontab/cut_nginx_log.sh  #表示每天凌晨执行

:wq!  #保存退出

6、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装

chkconfig crond on #设为开机启动

service crond start #启动

每天会在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs

目录下生成类似bbs_access_20140126.log和bbs_access_20140126.log的日志文件

并且只保留最近30天的日志记录

至此,Linux下定时切割Nginx访问日志并删除指定天数前的日志记录完成。

备注:如果脚本在执行过程中出现下面错误

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决办法:

/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf

#使用nginx -c的参数指定nginx.conf文件的位置

扩展阅读:

========================================================

Nginx访问日志参数说明

192.168.21.1 - - [27/Jan/2014:11:28:53 +0800] "GET /2.php HTTP/1.1" 200 133 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36" "-"192.168.21.128 200 127.0.0.1:9000 0.119 0.119

$remote_addr:客户端地址  192.168.21.1

$remote_user:客户端用户 -

$time_local:时间和时区   27/Jan/2014:11:28:53 +0800

$request:请求的URL路径和HTTP协议   GET /2.php HTTP/1.1

$status: HTTP状态  200

$body_bytes_sent:发送给客户端页面大小  133

$http_referer:页面跳转来源 -

$http_user_agent:用户访问终端  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36

$http_x_forwarded_for:HTTP 代理中,请求端真实IP -

$http_host:用户在浏览器中输入的URL(IP或着域名)地址  192.168.21.128

$upstream_status: upstream状态    200

$upstream_addr: 后端upstream地址及端口  127.0.0.1:9000

$request_time: 页面访问总时间  0.119

$upstream_response_time:页面访问中upstream响应时间   0.119

时间: 2024-07-29 07:47:05

linux中日志的自动切割和删除的相关文章

实现Linux中Mysql数据库自动备份并上传到远程FTP服务器

这篇文章很有分享价值,因为我们在实际的生产环境中需要将数据库进行自动备份,然后上传到指定的位置,当然也可以像以下文章中所讲的一样,上传到你指定的FTP服务器中,从而实现Mysql数据库自动备份并上传到远程FTP服务器的部署,在Linuxhttp://www.aliyun.com/zixun/aggregation/31093.html">技术交流群中,也有朋友会遇到这方面的问题,可以将此文分享给群友共益. 注意:任何的操作都会具有风险性,请在本机实际测试通过之后再部署到服务器环境,这样即熟

Linux中字符模式下设置和删除环境变量?

Linux中字符模式下设置和删除环境变量? bash下 设置:export 变量名=变量值删除:unset 变量名 csh下 设置:setenv 变量名 变量值删除:unsetenv 变量名

linux中shell脚本自动腾出空间脚本

 系统:centos 5.x 脚本内容:  代码如下 复制代码 cat make_room.sh #!/bin/bash #size=`df -hP|grep /dev/mapper/VolGroup00-LogVol00|awk '{print $4}'|cut -f 1 -d "G"` size=`df -mP|grep /dev/mapper/VolGroup00-LogVol00|awk '{print $4}'` file="/root/sqlbak" i

linux中文件操作命令(创建、删除、查看、权限设置)

创建文件(touch)命令 Linux 创建文件命令主要用到的是 touch 命令,touch 命令可用来修改文件的访问时间,修改时间,如果没有指定时间,则默认为当前时间,如果指定的文件不存在,则 touch 命令将创建该文件. 命令格式: touch [-acfm] [-r file(参照文件)] [-t decimtime(时间值)] [-d time(时间值)] [--time={atime,access,use,mtime,modify}] [--date=time] [--refere

linux中expect实现自动登录的例子

使用expect实现简单自动登录,从网上看了几个脚本不错,借鉴一下 NO.1 #!/bin/sh auto_login_ssh(){ expect -c " set timeout -1; spawn -noecho ssh -o StrictHostKeyChecking=no $2 ${@:3}; expect *assword:*; send -- $1\r; interact;" } auto_login_ssh password user@hostname StrictHos

CentOS中Mongodb数据库自动备份并删除指定天数前的备份

说明: Mongodb数据库服务器 操作系统:CentOS Mongodb数据库版本:mongodb-linux-x86_64-2.6.x 具体操作: 1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/mongod_bak_list 2.新建Mongodb数据库备份脚本 vi /home/crontab/mongod_bak.sh #新建文件,输入

Linux中VPS备份数据库的脚本(删除10前备份)

加入crontab定时任务,每天执行.达到的效果是:每天备份数据库到指定目录,删除10天前备份的文件. 以下是脚本内容:  代码如下 复制代码 #!/bin/bash mysql_host="127.0.0.1" mysql_user="root" mysql_passwd="********" back_dir="/www/backup/database/" ignore_db="information_schem

Linux中查找指定类型文件以及删除例子

在Linux服务器上运行Weblogic服务器,每次需要关闭Weblogic服务器后,都会在domain下留下一些*.lok的文件,导致下次启动的时候因为这些文件无法启动,因此,需要删除产生的所有.lok文件. 手动一个一个的删除比较麻烦,需要domain的每个目录都进去看看有没有,有的话删除. 可以通过执行下面的命令查看有哪些这样的文件和批量删除它们. find ./ -name "*.lok"   // 查找文件 find ./ -name "*.lok" |x

linux中禁止Kernel自动升级的方法

不过在更新其他软件包时,如果依赖最新的内核,那么该软件包是没法更新成功的. 方法如下: 方法1: # vim /etc/yum.conf exclude=kernel* 在 [main]配置段下,追加或修改以上内容. 可通过下面的命令查看是否生效: # yum update | grep -i kernel 方法2: 在yum命令行中加上-x参数,来跳过指定的更新.如: # yum -x 'kernel*' update