当操作mongo,很频繁存取的时候,mongo的日志会变得越来越大,
针对公司每天百亿级别的取和存,并保持mongo不重启的情况下,
用python写定时脚本,并保持mongo一直在线,不重启。
首先看一下在linux(centos)测试机上的mongo简单配置文件(mongodb.conf)
bind_ip=0.0.0.0
port=27017
dbpath=/usr/local/mongodb/data/db
logappend=true
fork=true
logpath=/usr/local/mongodb/data/logs
slowms=100
为了保证所有的操作对mongo的运行不受影响,
(1)手动清除(不影响mongo运行)
使用mongo自带的日志回滚功能
在mongo的交互式shell中我们需要执行以下两条命令:
use admin
db.runCommand({logRotate: 1})
执行完以后会在data目录下生成如这种文件(logs.2018-08-18T07-12-58)
同时logs文件还会存在,初始化了(变小了)
因为我们的日志是存储在logs(logpath=/usr/local/mongodb/data/logs)下的
所以我们还要手动删除(logs.2018-08-18T07-12-58)这种文件。
(2)脚本自动清除(不影响mongo运行)
# coding: UTF-8
import os,time
def re_logs():
os.system('/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin -eval "db.runCommand({logRotate: 1})"')
path = '/usr/local/mongodb/data'
list1 = os.listdir(path)
print('所有文件',list1)
remove_list = []
for i in list1:
if i.find('logs.') != -1:
remove_list.append(i)
for i in remove_list:
os.system('rm -rf {0}'.format(path+'/'+i,))
print('清空后剩余文件',os.listdir(path))
if __name__=="__main__":
while True:
re_logs()
time.sleep(60 * 10)
定时10分钟清一次