您好 我将我的日志文件保存在/ opt / project / logs /下,我希望每天通过压缩将这些文件复制到/ opt / bkp。
为此,我写了这个并且运作良好:
#!/bin/bash
getdate(){
date --date="$1 days ago" "+%Y_%m_%d"
}
rm -rf "/opt/bkp/logs/myapp_log_"$(getdate 365).gz ;
/bin/cat /opt/project/logs/myapp.log | gzip > /opt/bkp/logs/myapp_log_`date +%Y_%m_%d`.gz ;
echo "" > /opt/project/logs/myapp.log ;
然而,它不起作用或一般,我将有几个应用程序在同一个app1.log app2.log
文件夹下保存名称为/opt/project/logs/
的文件。如何将此作为“函数”,其中脚本读取/opt/project/logs/
目录下的每个文件并对每个文件进行备份以.log
扩展名结束?
答案 0 :(得分:2)
您可以使用发行版附带的logrotate(8)
工具。 :)该联机帮助页有一个看起来接近您需要的示例:
/var/log/news/* {
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP `cat /var/run/inn.pid`
endscript
nocompress
}
好吧,不是monthly
位,或重新启动inn
:)但我希望您能够轻松地将新的配置文件添加到/etc/logrotate.d/
而不用担心它再次。 :)
答案 1 :(得分:0)
您是否考虑过使用'logrotate'?它将为您压缩和修剪日志,可选择启动需要踢的关闭日志文件,制作茶等等。这可能是您的linux框用于日志管理的。
man logrotate
了解更多。你的方式,当你得到你想要的功能时,你会写logrotate:)
答案 2 :(得分:0)
我建议也使用logrotate
,但无法拒绝编写此脚本:)
proc_logs() {
for log in /opt/project/logs/*.log; do
cat "$log" | gzip > ${log%/*}/$(basename "$log" ".log")_`date +%Y_%m_%d`.gz;
touch "$log";
done
}