不暂停服务清理日志

Mongo在运行一段时间后,日志会积累越来越多,占用磁盘空间,但如果直接通过rm -rf mongo.log会把当前日志清除后并未能新生成一个新的日志,所以通常需要先停止Mongo-》清理日志–》启动Mongo,对于生产环境来说,这样的方式对现运行的应用是有影响和风险的,所以网上搜了下不停服的清理日志方式。

kill -SIGUSR1 pid

eg:

  • 先通过ps -ef|grep mongo 查看到当前Mongo的PID号
  • 通过命令生成一个新的日志且不用停服
  • 通过命令查看时发现新生成了一个新的日志,就可以删除原来的服务了

Linux下配制定时任务执行删除切分日志

1.shell 脚本 vi logRotate.sh

#!/bin/bash

#/opt/mongodb/bin/mongo --username system --password C4T2s~BwRE111112222  --authenticationDatabase admin admin /data/mongo/logRotate.js
mongo /data/mongo/logRotate.js

#mongo 127.0.0.1:27017 -usystem -pC4T2s~BwRE111112222 --authenticationDatabase admin /data/mongo/logRotate.js (这个js中就一个js命令,是mongoshell的切分日志命令,但因为切换数据库use admin不识别,所以此方法没生效,换用了下面的kill的切分日志:db.runCommand( { logRotate : 1 } ); )
logfile=/data/mongo #Mongodb日志存放目录

days=1 #代表删除7天前的备份,即只保留最近7天的备份
pid=`ps -ef | grep mongo |  awk '{ print $2}'`
/bin/kill -SIGUSR1 $pid 1 > /dev/null 2> /dev/null  #切割日志
find $logfile/ -mtime +$days -delete #删除7天前的备份文件

:wq保存退出

我的环境用到的脚本如下

#!/bin/bash

#当前时间
currTime=$(date "+%Y-%m-%d %T")

#logfile=/data/mongo #Mongodb日志存放目录

#days=3 #代表删除7天前的备份,即只保留最近7天的备份

pid=`ps -ef | grep mongos |  awk '{ print $2}'`

echo $currTime "分割日志并清理日志开始=================================">> /data/mongo/cleanlog.log

/bin/kill -SIGUSR1 $pid 1 > /dev/null 2> /dev/null  #切割日志


find /data/mongo/  -mtime +7  -name "mongos.log.*" -exec rm -rf {} \; #删除7天前的备份文件

echo $currTime "分割日志并清理日志结束=================================">> /data/mongo/cleanlog.log

配制linux定时任务

填加定时任务 vi /etc/crontab

在文件最下面填 加
0 15 * * * /data/mongo/logRotate.sh  #表示每天下午3点执行

详见下图所示

mongodb Journal日志恢复 mongodb 日志清理_mongodb Journal日志恢复

重新启动crond使设置生效

本机重新启动生效的方法为:

systemctl restart crond

如下图所示:

mongodb Journal日志恢复 mongodb 日志清理_mongodb Journal日志恢复_02


其它启动方式详见下面几种

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

chkconfig crond on #设为开机启动

service crond start #启动
crontab -l #查看有多少个定时任务

定时任务生效的另一种方法

用了上面的方法,发现定时任务并表没有生效,通过crond -l查看,没有查到配的定时任务,用下面方法做了调整

crontab -e
执行上面命令后进行定时任编辑页面,加入自己的定时任务后保存,退出再通过命令crontab -l可以查看到自己填加的任务了,并且成功持 行了