用于压缩和删除日志的shell作业,每月一次

问题描述 投票:0回答:1

我正在尝试在centOS上运行一个计划作业到.gz并从目录中删除整整一个月的日志。这些日志名为somelogfile_12Apr19_18_19_41.log,somelogfile_28Mar19_07_08_20.log

我可以运行以下脚本来手动执行此任务

tar -cvzf somezipfile_Mar19.tar.gz somelogfile_**Mar** --remove-files

计划的作业应该在每月的第5天运行,以压缩和删除前几个月的日志。自动化脚本会是什么样的?我被困在如何根据月份名称(Jan,Feb,Mar等)仅包括前几个月的日志

bash shell unix cron cron-task
1个回答
1
投票

要解决的第一个问题是,您需要一个可以在任何月运行并产生正确结果的更通用的函数。获取所需信息的好工具(缩写月份和年份的最后两位数字)是date

date -d "last month" +%b

当运行于4月1日,2019年将产生“Mar”。

date -d "last month" +%b%y

在2019年4月1日运行时,将生成“Mar19”。

现在我们知道如何获取我们想要的信息,将date命令放在tar命令中将自动生成您正在寻找的结果。

tar -cvzf somezipfile_$(date -d "last month"%b%y).tar.gz somelogfile_**$(date -d "last month" +%b)** --remove-files

存在的最后一个问题是调度,可以使用cron解决。以下语句将在每月的第5天运行/bin/foobar,此时将其添加到您的crontab文件中。 (crontab -e编辑你的crontab文件)

0 0 5 * * /bin/foobar

将所有内容组合在一起,您将得到:

0 0 5 * * /bin/tar -cvzf somezipfile_$(date -d "last month"\%b\%y).tar.gz somelogfile_**$(date -d "last month" +\%b)** --remove-files

不要忘记逃避crontab中的%

© www.soinside.com 2019 - 2024. All rights reserved.