不暂停服务清理日志
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点执行
详见下图所示
重新启动crond使设置生效
本机重新启动生效的方法为:
systemctl restart crond
如下图所示:
其它启动方式详见下面几种
/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可以查看到自己填加的任务了,并且成功持 行了