每月一次的Shell作业以压缩和删除日志

时间:2019-04-14 09:47:37

标签: bash shell unix cron cron-task

我正在尝试在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等)来包含前几个月的日志

1 个答案:

答案 0 :(得分:1)

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

date -d "last month" +%b

2019年4月1日投放时,将产生“ 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解决。当添加到crontab文件中时,以下语句将在每月{5}运行/bin/foobar。 (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中转义%s