我需要编写一个脚本来复制日志文件。
日志有两种格式:
System_<date_timestamp>.log
trace_<date_timestamp>.log
当跟踪日志达到 20 MB 且系统日志达到 10 MB 时,将生成新文件。
这些日志只允许保存5个(每种5个),一旦超过5个,旧文件将被删除并被新文件替换。
因此,在删除它们之前,我需要将它们复制到不同的位置,以便稍后需要调试时可以查看它们。
基本上,它将如下所示(仅显示跟踪日志格式,与系统日志类似):
trace_12.03.05_17.11.20.log
trace_12.03.05_17.12.30.log
trace_12.03.05_17.13.45.log
trace_12.03.05_17.13.23.log
trace_12.03.05_17.14.40.log
答案1
您也可以使用 log-rotate 进行相同的操作,请参阅以下示例
# Logrotate file for trace
/source/path/trace_*.log {
missingok
create
compress
rotate 1
lastaction
# After compressing logs, move to other location
Log_dir="/target/dir/old_log_$(date +%F)/$(date +%H_%S)/"
[[ ! -d "${Log_dir}" ]] && /bin/mkdir -p "${Log_dir}"
/bin/mv /source/path/*.gz "${Log_dir}"
endscript
}
保存上面的文件,然后/etc/logrotate_trace.conf
简单地设置每小时的 cron 作业
00 * * * * /usr/sbin/logrotate -f /etc/logrotate_trace.conf
为了进行测试,您可以从命令行运行它
/usr/sbin/logrotate -f /etc/logrotate_trace.conf
答案2
使用 GNU cp
(大多数非嵌入式 Linux 发行版和其他一些 Unices 上都有):
cp -p --update /source/path/trace_*.log /target/dir
答案3
最直接的工具是同步,它复制新文件、更新更改的文件并保留现有的未更改文件。
rsync -a /path/to/source/*.log /path/to/backup/directory/