理清服务器网站日志,自动切割Nginx日志

by admin on 2019年2月14日

1.清空nginx站点日志的内容(如若剔除日志文件,唯有重启服务器才能重新生成日志文件举行记录)

大家常用的日记切割情势是应用Shell脚本切割日志和动用Logrorate切割日志,前几日本身来给我们逐一介绍:

本文以定时删除linux有些系统日志为例,创造每隔半钟头删除指定文件(一些日志文件持续增强)

初稿出处:https://www.cnblogs.com/peida/archive/2013/03/25/2980121.html
文中定时职责不了解的可以切实查看此文:理清服务器网站日志,自动切割Nginx日志。https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

bf88必发唯一官网 1

接纳Shell脚本切割日志

我们在Nginx的站点布局文件上将日志文件保留在目录:/home/www_logs中,我们必要做的是将日志文件切割,并按月度保存起来。写一个本子文件,命名为cut_nginx.sh。

#!/bin/bash
SAVE_DIR='/home/wwwlogs'
MONTH=$(date -d "yesterday" +%Y%m)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

mkdir -p $SAVE_DIR/$MONTH
mv $SAVE_DIR/access.log $SAVE_DIR/$MONTH/access_$YESTERDAY.log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
echo "cut nginx log is ok\n"

专注你的环境中的pid或然路径不均等,如若您是按部就班:CentOS7应用源码编译安装Nginx小说展开设置的,那你的pid就是上边代码中的路径。

保存好cut_nginx.sh,并予以可实施权限:

chmod +x cut_nginx.sh

此时你执行cut_nginx.sh后,假使发现/home/wwwlogs/下多了/201805/access_20180503.log这么的文书,表达切割代码平常运作了。

一,创立机关执行脚本
mkdir /home/project/AutoTask && cd /home/project/AutoTask # 创建存放自动任务的文件夹
vi del_system_log.sh #创建自动脚本文件

情节如下(找出相关的日志文件,并推行删除)

#!/bin/sh
find /var/log/  -name "kern.log*" -exec rm -rf {} \; 
find /var/log/  -name "syslog*" -exec rm -rf {} \;
find /var/log/  -name "messages*" -exec rm -rf {} \;
find /var/log/  -name "dpkg.log*" -exec rm -rf {} \;
find /var/log/  -name "dmesg*" -exec rm -rf {} \;

给予脚本执行权限

chmod 755 del_system_log.sh 

linux是壹个很能活动发出文书的系统,日志、邮件、备份等。就算今后硬盘廉价,大家可以有不可胜道硬盘空间供这几个文件浪费,让系统定时清理一些不需求的文本很有一种爽快的业务。不用您去天天记挂着是还是不是须要清理日志,不用每日接到硬盘空间不足的告警短信,想好好休息的话,让大家把那么些业务交给机器定时去实践呢。

编制脚本

使用Logrorate切割日志

Logrotate是Linux系统自带的万分有效的日志管理工具,位于/usr/sbin/logrotate,它能够自行对日记举行截断(或轮循)、压缩以及去除旧的日志文件。

/etc/logrotate.d/下开创1个布局文件 nginx, 内容如下:

/home/data/www_logs/*.log
{
    daily
    rotate 30
    missingok
    dateext
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
        if [ -f /usr/local/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
        fi
    endscript
}

配置表达

daily:指定转储周期为每日,也得以是weekly:每一周,monthly:每月

rotate:转储次数,超过将会去除最老的那么些,上述代码中象征可以存贰十四个

missingok:忽略错误,如“日志文件无法找到”的谬误提醒

dateext:切割后的日记文件会增大上二个短横线和YYYYMMDD格式的日期

compress:通过gzip 压缩转储旧的日志

delaycompress:当前转储的日志文件到下五次转储时才压缩

notifempty:即使日志文件为空,不履行切割

sharedscripts:只为整个日志组运营三遍的剧本

prerotate/endscript:在转储在此之前需求履行的指令可以放入那个对,那七个相当首要字必须独立成行

保存好布局文件后,可以执行以下命令测试:

logrotate -vf /etc/logrotate.d/nginx 

假使不出意外的话,你可以到/home/wwwlogs下发现多了2个看似access.log-20180503那样的文件。

倘若出现错误音信:error: skipping "/home/data/www_logs/access.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotat,则要求在安顿文件中充足一行:su root root

二,添加定时任务
 crontab -e

bf88必发唯一官网 2

输入自动执行命令(每隔二十9分钟一实施)

*/30 * * * * cd /home/project/AutoTask/ && sh del_system_log.sh 

bf88必发唯一官网 3

编制达成,按下ctr+X退出

bf88必发唯一官网 4

然后输入Y回车,即可保存
翻看自动任务列表

crontab -l

旁观下图,即标识添加成功

bf88必发唯一官网 5

1.删减文件命令:

 

定时职责执行

切割功效落成了,那我们要做的是天天切割一遍,那么些任务交给crontab来成功。Crontab设置教程:PHP+Crontab执行定时任务.

若果采取shell脚本切割日志,可以安装crontab定时义务:

0 0 * * * /bin/sh /home/cut_nginx.sh

理清服务器网站日志,自动切割Nginx日志。如若利用Logrorate切割日志,可以安装crontab定时义务:

0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx

那般定时职分会在天天凌晨00:00自动执行日志切割职责,无需人工干预。

3、其它
/etc/init.d/cron restart #重新启动crontab
/etc/init.d/cron reload #重新加载crontab
/etc/init.d/cron status #查看crontab状态
*/1 *   * * * echo "Intel Galileo11" >> /home/project/AutoTask/test1.txt #每隔一分钟些人“Intel Galileo11”到指定文件中

find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} ;

 

实例命令:

 

find /opt/soft/log/ -mtime +30 -name “*.log” -exec rm -rf {} ;

bf88必发唯一官网 6

说明:

bf88必发唯一官网 7

将/opt/soft/log/目录下全数30天前带”.log”的文书删除。具体参数表达如下:

bf88必发唯一官网 8

find:linux的寻找命令,用户查找指定条件的文件;

添加定时义务,每月的14号和28号的12点0分进行清理脚本

/opt/soft/log/:想要举办清理的私行目录;

 

-mtime:标准语句写法;

 

+30:查找30天前的文本,这里用数字代表天数;

2.刨除iis站点过期的日志(我的日记是天布置,其它一些急需注意的是无法去除当天的日志,因为会有警示说已经在系统打开)

.log”:希望物色的数据类型,”.jpg”表示查找扩张名为jpg的兼具文件,”*”表示查找全数文件,那一个可以灵活运用,举一反三;

<?php
/* 
    清理IIS网站过期日志,释放C盘空间 
*/

$logs_path = "C:\inetpub\logs\LogFiles";    //日志所在路径
$folder_head = "W3SVC";    //日志文件夹名的前缀
$file_head = "u_ex";    //日志文件名的前缀
$file_foot = ".log";    //日志文件名的后缀

$logs_path = str_replace("\\", "/", $logs_path);
if (! file_exists($logs_path)) die('日志目录不存在');
$scan = scandir($logs_path);
$folders = array();    //定义变量存在日志文件夹名

for ($i=0; $i < count($scan); $i++) { 
    if((substr($scan[$i], 0, strlen($folder_head)) == $folder_head) && file_exists($logs_path.'/'.$scan[$i]))
        array_push($folders, $scan[$i]);
}

$today = date('Ymd');
$today = substr($today, 2);
$todayLog = $file_head.$today.$file_foot;


for ($i=0; $i < count($folders); $i++) { 

    $filesInFolder = scandir($logs_path.'/'.$folders[$i]);

    for ($j=0; $j < count($filesInFolder); $j++) { 
        if(($filesInFolder[$j] != $todayLog) && 
            (substr($filesInFolder[$j], 0, strlen($file_head)) == $file_head) &&
            (strrev(substr(strrev($filesInFolder[$j]), 0,strlen($file_foot))) == $file_foot))
            unlink($logs_path.'/'.$folders[$i].'/'.$filesInFolder[$j]);
    }
}

echo '过期日志清理完毕';

?>

-exec:固定写法;

编制删除脚本 clear.php

rm -rf:强制删除文件,包涵目录;

 

{} ; :固定写法,一对大括号+空格++;

bf88必发唯一官网 9

2.布署义务:

编写bat批处理文件,存放地方任意,双击该公文即可形成删除,此处不做定时职分,手动删除

若嫌每回手动执行语句太难为,可以将那小语句写到2个可实施shell脚本文件中,再设置cron调度执行,那就可以让系统活动去清理相关文书。

 

2.1创建shell:

 

touch /opt/soft/bin/auto-del-30-days-ago-log.sh

 

chmod +x auto-del-30-days-ago-log.sh

 

新建一个可执行文件auto-del-30-days-ago-log.sh,并分配可运行权限

2.2编辑shell脚本:

vi auto-del-30-days-ago-log.sh

编辑auto-del-30-days-ago-log.sh文件如下:

!/bin/sh

find /opt/soft/log/ -mtime +30 -name “*.log” -exec rm -rf {} ;

ok,保存退出(:wq)。

2.3安插任务:

crontab -e

将auto-del-30-days-ago-log.sh执行脚本参与到系统安排职务,到点自动执行

输入:

10 0 * * * /opt/soft/log/auto-del-7-days-ago-log.sh >/dev/null
2>&1

那边的设置是每一天凌晨0点11分执行auto-del-7-days-ago-log.sh文件进行数量清理职分了。

完了上述三步,你就再也不每一天思念是或不是硬盘空间满了,该清理日志文件了,再也不会受到服务器硬盘空间不足的告警音讯了,放心的去看书喝咖啡去啊!#
Linux应用计算(1):自动删除n天前天志

linux是1个很能半自动发出文书的系统,日志、邮件、备份等。尽管将来硬盘廉价,大家得以有为数不少硬盘空间供这一个文件浪费,让系统定时清理一些不需求的文件很有一种爽快的事务。不用你去天天牵记着是还是不是须求清理日志,不用每一日接受硬盘空间不足的报警短信,想要得休息的话,让我们把那一个工作交给机器定时

bf88必发唯一官网 ,执行吧。

1.删除

文件

命令:

find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} ;

实例命令:

find /opt/

soft

/log/ -mtime +30 -name “*.log” -exec rm -rf {} ;

说明:

将/opt/

soft

/log/目录下全体30天前带”.log”的文本删除

。具体参数表明如下:

find:linux的追寻命令,用户查找指定条件的文本

/opt/

soft

/log/:想要举行清理的任性目录

-mtime:标准语句写法

+30:查找30天前的文书,那里用数字代表天数

“*.

log

“:希望物色的数据类型,”.jpg”表示查找伸张名为jpg的全数文件,”“表示查找全体文件,那么些可以灵活运用,举一反三

-exec:固定写法

rm -rf:强制删除文件,包罗目录

{} ; :固定写法,一对大括号+空格++;

2.布署义务:

若嫌每一遍手动执行语句太难为,可以将那小语句写到1个可进行

shell脚本

文件中,再安装cron调度执行,那就足以让系统活动去清理相关文件。

2.1

创建

shell:

touch /opt/

soft

/bin/auto-del-30-days-ago-log.sh

chmod +x auto-del-30-days-ago-log.sh

新建七个可执行文件auto-del-30-days-ago-log.sh

并分配可运维权限

2.2编辑shell脚本:

vi auto-del-30-days-ago-log.sh

编辑auto-del-30-days-ago-log.sh文件如下:

!/bin/sh

find /opt/

soft

/log/ -mtime +30 -name “*.log” -exec rm -rf {} ;

ok,保存退出(:wq)

2.3

安排任务:

crontab -e

将auto-del-30-days-ago-log.sh执行脚本参与到系统安顿职务,到点自动执行

输入:

10 0 * * * /opt/

soft

/log/auto-del-7-days-ago-log.sh >/dev/null 2>&1

此间的装置是每天凌晨0点拾叁分执行auto-del-7-days-ago-log.sh文件进行数据清理职分

了。

成就以上三步,你就再也不每日挂念是不是硬盘空间满了,该清理日志文件了,再也不会受到服务器硬盘空间不足的报警音讯了,放心的去看书喝咖啡去吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图