我正在编写一个shell脚本,根据利用SELECT R.[First Time], L.[USER], R1.[Destination Port] , L1.[IP Address] AS 'L1 IP Address',L2.[IP Address] AS 'L2 IP Address'
FROM [SAPA_SOCTemp_v1].[dbo].[LookUp_15_75] AS L
INNER JOIN [SAPA_SOCTemp_v1].[dbo].[Raw_15_244] AS R
ON L.[USER]=R.[Source User]
INNER JOIN [SAPA_SOCTemp_v1].[dbo].[Raw_15_246] AS R1
ON L.[IP]=R1.[Source IP]
LEFT JOIN [SAPA_SOCTemp_v1].[dbo].[LookUp_15_76] AS L1 ON R1.[Destination IP]=L1.[IP Address]
LEFT JOIN [SAPA_SOCTemp_v1].[dbo].[LookUp_15_77] AS L2 ON R1.[Destination IP]=L2.[IP Address]
WHERE L.[USER]='support.treasury1'
AND R.[Source User]='support.treasury1'
实用程序的大小来旋转日志文件。
logrotate.conf
即使尺寸小于10K,也不会打印#!/bin/bash
FILENAME=/xyz/console.log
while :
do
FILESIZE=$(du -h "$FILENAME")
####FILESIZE=$(stat -c%s "$FILENAME")
if [[ $FILESIZE > 10K ]];
then
echo "$FILENAME is too large = $FILESIZE"
echo "$(date ) is here"
cd "/etc"
$sudo logrotate -f logrotate.conf
echo "$ Newer version of log file is created"
else
echo "Log limit is not reached"
fi
sleep 60s
done
exit 0
块。在所有情况下,它都在执行else
块并在4.0K时旋转日志。只有当日志文件为零字节时,它才会打印if
部分,即:
未达到日志限制
答案 0 :(得分:2)
问题是[[ > ]]
正在进行字符串比较(基本上是字母顺序)而不是数字比较。所以,例如,[[ 9 > 10 ]]
是真的,因为角色" 9"来自" 1"在ASCII排序顺序。但是切换到数字比较(使用(( > ))
或[[ -gt ]]
)也不会有效,因为"数字"你比较有单位后缀(" B"代表字节," K"代表千字节等,所以500B小于1K)和 du
的输出还包括文件名,在比较之前需要对其进行条带化。
这是太多的工作。只需使用stat
即可获得纯数字结果,并对其进行数值比较。哦,你应该坚持使用低位或大小写变量名,以避免意外地使用其中一个对shell有特殊意义的变量名(例如PATH
):
...
filesize=$(stat -f %z "$filename")
if (( filesize > 10240 )); then
...
答案 1 :(得分:1)
您正在使用字符串比较。例如,如果文件大小为2K,则2K > 10K
为真,因为2在10之后按字母顺序排列。
最简单的解决方案是放弃-h
选项 - 如果你想进一步处理结果,那么它没有多大意义 - 然后使用数值比较,
if (( FILESIZE > 10 ))
then
fi