我正在尝试在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等)仅包括前几个月的日志
要解决的第一个问题是,您需要一个可以在任何月运行并产生正确结果的更通用的函数。获取所需信息的好工具(缩写月份和年份的最后两位数字)是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中的%