我使用以下代码片段进行日志轮换

我使用以下代码片段进行日志轮换

有人可以解释一下这是如何工作的吗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 mongodmongoDB 服务行的过滤器
  • awk '$0!~/grep/ && $2~/[0-9]/{print "kill -SIGUSR1 "$2}'过滤器忽略grep进程并检查第二列(应该是 PID)是否为数字。如果两个条件都成立,它将打印消息“kill -SIGUSR1”,并附加 mongoDB 的 PID。
  • bashawk通过解析“打印”的消息bash

在此命令序列之后,find将调用该命令,该命令依次执行以下操作:

  • -type f在目录 中查找文件 ( ) /tmp/logs/*,检查修改时间是否大于或等于 24 小时 ( -mtime +7) 的 7 倍,并调用rm( -exec rm {} \;) 删除它们。

https://docs.mongodb.org/v3.0/tutorial/rotate-log-files/有关旋转日志的详细信息

相关内容