有人可以解释一下这是如何工作的吗ps -ef | grep mongod | awk '$0!~/grep/ && $2~/[0-9]/{print "kill -SIGUSR1 "$2}' | bash; find /tmp/logs/* -type f -mtime +7 -exec rm {} \;
答案1
这里实际上做了两件事,即向 mongoDB 发送信号以轮换日志,第二个命令删除超过 7 天的日志。
第一个命令序列执行以下操作:
ps -ef
获取以下形式的完整进程列表: UID PID PPID C STIME TTY TIME CMD (或类似)grep mongod
mongoDB 服务行的过滤器awk '$0!~/grep/ && $2~/[0-9]/{print "kill -SIGUSR1 "$2}'
过滤器忽略grep
进程并检查第二列(应该是 PID)是否为数字。如果两个条件都成立,它将打印消息“kill -SIGUSR1”,并附加 mongoDB 的 PID。bash
awk
通过解析“打印”的消息bash
在此命令序列之后,find
将调用该命令,该命令依次执行以下操作:
-type f
在目录 中查找文件 ( )/tmp/logs/*
,检查修改时间是否大于或等于 24 小时 (-mtime +7
) 的 7 倍,并调用rm
(-exec rm {} \;
) 删除它们。
看https://docs.mongodb.org/v3.0/tutorial/rotate-log-files/有关旋转日志的详细信息