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



我正在尝试在 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 日运行一次,以压缩和删除前几个月的日志。自动化脚本会是什么样子?我陷入了如何仅包含基于月份名称(1月,2月,3月等(的前几个月日志的困境。

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

最新更新