Linux脚本进行日志处理:防止日志文件过大,保留最近一段时间一定大小的日志

command.sh:
指令,如java -version

test.sh(后台启动test.sh,同级生成test.log):
nohup ./command.sh > test.log 2>&1 &

logDealer.sh(test.log大于40KB就删除logs/test/下所有文件,复制test.log为同级logs/test/当前时间.log,删除test.log,test.log因为有test.sh在后台执行会重新生成):
FILE=`echo test.log`
FILE_SIZE=`echo $(du $FILE) | awk '{print $1}'`
if [ $FILE_SIZE -ge 40 ]
then 
 cp -p $FILE logs/test/$(date "+%Y-%m-%d_%H:%M:%S").log
fi

crontab -e后vi编辑(每分钟执行一次/home/test/testProgram/test下的logDealer.sh):
*/1 * * * * /home/test/testProgram/test/logDealer.sh

编写历程(含知识点解析):
目录结构(/home/test/testProgram/test):
command.sh
test.sh
logs
    test    

Java的System.out打印和异常对于Linux都属于标准输出流(1):
nohup ./test_1.sh > log.txt &
Java的System.err打印应该对于Linux属于标准错误流(2),待检验:
nohup ./test_1.sh > log.txt 2>&1 &
nohup ./test_1.sh > test.log 2>&1 &

输出date "+%Y-%m-%d_%H:%M:%S":
echo date "+%Y-%m-%d_%H:%M:%S"
输出date "+%Y-%m-%d_%H:%M:%S"的执行结果:
echo $(date "+%Y-%m-%d_%H:%M:%S")

nohup ./test_1.sh > log_$(date "+%Y-%m-%d_%H:%M:%S").txt 2>&1 &
nohup ./test_1.sh > logs/log_$(date "+%Y-%m-%d_%H:%M:%S").txt 2>&1 &
nohup ./test_1.sh > logs/test/$(date "+%Y-%m-%d_%H:%M:%S").log 2>&1 &

单位:K
不显示单位:
du log.txt
显示单位:
du -sh log.txt

echo $(du log.txt)

| 表示管道,上一条命令的输出,作为下一条命令的参数:
echo $(du log.txt) | awk '{print $1}'

``是命令替换,指Shell可以先执行``中的命令,将输出结果保存:
FILE_SIZE=`echo $(du log.txt) | awk '{print $1}'`
echo $FILE_SIZE
等同于
echo `echo $(du log.txt) | awk '{print $1}'`

1024K对应1M
-ge为大于等于
fi表示结束
[]内部两侧必须有空格

FILE_SIZE=`echo $(du log.txt) | awk '{print $1}'`
if [ $FILE_SIZE -ge 10240 ]
then 
 echo file bigOrEqual 10M
else 
 echo file small 10M
fi

FILE=`echo test.log`
FILE_SIZE=`echo $(du $FILE) | awk '{print $1}'`
if [ $FILE_SIZE -ge 40 ]
then 
 cp -p $FILE logs/test/$(date "+%Y-%m-%d_%H:%M:%S").log
fi

当前目录下文件数量(参考:https://www.cnblogs.com/dbalightyear/p/11280217.html):
ls -l | grep "^-" | wc -l

LOG_COUNT=`echo $(ls -l | grep "^-" | wc -l)`
echo $LOG_COUNT

/*之间没有空格,否则会误删当前目录下的文件:
rm -f logs/test/* 

查看crontab服务状态(参考:https://blog.csdn.net/qq_39131177/article/details/79051711):
service crond status
查看crontab定时格式(参考:https://www.cnblogs.com/zhangchao0515/p/9772706.html):

test.sh:
FILE=`echo test.log`
FILE_SIZE=`echo $(du $FILE) | awk '{print $1}'`
if [ $FILE_SIZE -ge 2048 ]
then 
 rm -f logs/test/* 
 cp -p $FILE logs/test/$(date "+%Y-%m-%d_%H:%M:%S").log
 rm -f $FILE
fi

echo "test" >> /home/test/gisProgram/test/test.txt
crontab -e 
*/1 * * * * /home/test/testProgram/test/test.sh
*/1 * * * * /home/test/testProgram/test/logDealer.sh

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以用 `cron` 来实现定时任务。 要想在 Linux 下定时清空文件内容,可以这样写脚本: ```bash #!/bin/bash # 设置要清空的文件的路径 file_path="/path/to/file" # 在文件中写入空字符串,从而清空文件内容 echo "" > "$file_path" # 定时记录文件大小 while true; do # 获取文件大小 file_size=$(stat -c%s "$file_path") # 将文件大小写入另一个文件中 echo "$file_size" >> "/path/to/another/file" # 每隔一段时间(例如 1 小时)再次记录文件大小 sleep 3600 done ``` 然后,可以使用 `crontab` 命令来设置定时任务。例如,如果要每天凌晨 0 点清空文件内容,可以在命令行中输入: ```bash 0 0 * * * /path/to/script.sh ``` 这样,每天凌晨 0 点就会执行脚本,清空文件内容。 ### 回答2: 实现在Linux下定时清空文件内容和定时记录文件大小可以使用Shell脚本来实现。以下是一个简单的Shell脚本示例: ```bash #!/bin/bash # 定义文件路径 file_path="/path/to/file.txt" # 定义清空文件内容的函数 clear_file() { echo "" > $file_path } # 定义记录文件大小的函数 record_file_size() { file_size=$(du -h $file_path | awk '{ print $1 }') echo "$(date +"%Y-%m-%d %H:%M:%S") File Size: $file_size" >> file_size_record.txt } # 定义定时清空文件内容的任务 clear_task() { clear_file echo "$(date +"%Y-%m-%d %H:%M:%S") File Content Cleared" >> file_operation_log.txt } # 定义定时记录文件大小的任务 record_task() { record_file_size echo "$(date +"%Y-%m-%d %H:%M:%S") File Size Recorded" >> file_operation_log.txt } # 设置定时任务 # 定时清空文件内容,每天凌晨12点执行 # 定时记录文件大小,每小时执行一次 (crontab -l 2>/dev/null; echo "0 0 * * * /path/to/script.sh clear_task") | crontab - (crontab -l 2>/dev/null; echo "0 * * * * /path/to/script.sh record_task") | crontab - ``` ### 回答3: 在 Linux 下,可以使用 shell 脚本来实现定时清空文件内容和定时记录文件大小的功能。 首先,需要使用 `cron` 这个定时任务工具,它可以在指定的时间间隔内自动运行脚本。我们可以创建一个 shell 脚本文件,比如 `cleanup_script.sh`,用来实现清空文件内容和记录文件大小的功能。 下面是一个示例的脚本: ```bash #!/bin/bash # 清空文件内容 function clear_file() { echo -n > filename.txt echo "[$(date)] 文件内容已清空" >> log.txt } # 记录文件大小 function record_file_size() { file_size=$(stat -c%s filename.txt) echo "[$(date)] 文件大小为: $file_size bytes" >> log.txt } # 在脚本运行时,先清空文件内容,再记录文件大小 clear_file record_file_size ``` 在脚本中,`clear_file` 函数使用 `echo -n > filename.txt` 命令将文件内容清空,并将清空操作的时间记录到 `log.txt` 文件中。 `record_file_size` 函数使用 `stat -c%s filename.txt` 命令获取文件大小,并将大小和记录时间写入 `log.txt` 文件。 你可以根据自己的需求修改脚本中的文件名和日志文件名。 接下来,可以使用 `cron` 来配置定时任务,例如每天的凌晨 3 点清空文件内容并记录文件大小。运行 `crontab -e` 命令可以编辑定时任务: ```bash 0 3 * * * /bin/bash /path/to/cleanup_script.sh ``` 保存并关闭文件,这样定时任务就配置完成了。脚本将在每天的凌晨 3 点自动执行,清空文件内容并记录文件大小。 希望以上内容对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值