我正在尝试创建bash脚本,它会发现日志文件大小超过100 MB,如果发现它应该删除该文件并重新启动服务但我无法实现它。即使条件不满足,也会重新启动服务。
脚本:
if [[ $(find /var/log/ -size +100M -name "test.log" -delete) ]]
then
echo "Found"
service restart /etc/service/service_name/
fi
有人可以指出我,我做错了什么?
答案 0 :(得分:1)
使用du
和cut
的另一种方式是:
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