Bash脚本 - 查找大于xx的日志,如果满足条件,请重新启动该服务

时间:2017-05-30 06:47:20

标签: bash shell

我正在尝试创建bash脚本,它会发现日志文件大小超过100 MB,如果发现它应该删除该文件并重新启动服务但我无法实现它。即使条件不满足,也会重新启动服务。

脚本:

if [[ $(find /var/log/ -size +100M -name "test.log" -delete) ]]
then
echo "Found"
service restart /etc/service/service_name/
fi

有人可以指出我,我做错了什么?

2 个答案:

答案 0 :(得分:1)

使用ducut的另一种方式是:

max_size_in_bytes=12500000 # 100MB

if [ $(du -sb file.log | cut -f1) -ge $max_size_in_bytes ]; then
  echo "Found"
  service restart /etc/service/service_name/ 
fi

-ge标记表示greater than or equal to,您可以仅-gt使用greater than

编辑:

正如F. Hauri所说,stat -c %s file.log胜过du -sb file.log | cut -f1

答案 1 :(得分:0)

根据您的要求

简单地:

  • [ .. ]用于 test 。不要用它们来运行命令
  • $( )用于获取内部命令的输出。
  • 您的目标是根据命令效果运行命令并执行更多操作。
  • 如果没有 错误
  • find将取得成功。
  • grep -q不打印任何内容,但如果找不到任何内容,则以 false 状态退出。

试试这个:

if find /var/log/ -size +100M -name "test.log" -print -delete | grep -q . ;then
    echo Found.
    service servicename restart
fi

或者whiping grep命令,替换为shell测试:

if [ "$(find /var/log/ -size +100M -name "test.log" -print -delete)" ] ;then
    echo Found.
    service servicename restart
fi

这也可以。

我不了解你的目标,但它似乎是一个非常丑陋的解决方法

但也许这个

当您看到只有1个文件的状态时,还有另一种方式:

#!/bin/bash

logfile=/var/log/test.log
maxlogsize=$[ 100 * 1024**2 ]

crtlogsize=$(stat -c %s $logfile)

if (( crtlogsize > maxlogsize )) ;then
    echo "$logfile is oversize: $crtlogsize"
    > $logfile  # emptying file instead of removing
    service service_name restart
fi