Linux 中的 Systemd Timers 替换 Cron 做定时任务(上)

117 阅读3分钟

一:需求的提出

        在生产环境下我需要负责生产日志的切分工作,有一个数据盘挂载再服务器上,需要把切分出来的日志放在这个数据盘中。可以使用命令 df -h 查看当前目录情况​​编辑​ 二:解决方案

        使用 Cron + 脚本,定时切分日志。由于系统要求安全,所以该服务器是无网状态所以直接考虑的就是使用 Linux 中的自带的方便的定时工具

        首先编写脚本,这个脚本比较的简陋毕竟小编主要的工作就是做后端开发,这个脚本有瑕疵,小编会继续努力的。

        我这里解释一下,我使用的是简单的 nohup 命令启动的 jar 包,日志都是打在了 nohup 中,日志被 copy 一份放在了另外一个目录,数据盘只有 100G 空间,为了防止日志占满了空间,我和经理商讨保存 90 天,于是,在下面的操作中,每次 copy 日志的时候都是后面删除一下 90 天前的日志。

#!/bin/bash  
# Author: bojia
# log.out 日志分割
this_path=/日志所在的目录路径
current_date=`date +%Y%m%d`  # 时间

# 这里说明一下服务器只有那么大的空间所以日志只能保存一段时间的,我这里以 90 天为例
del_date=`date -d "90 days ago" "+%Y%m%d"`

cd $this_path
echo $this_path
echo $current_date
echo "------"
echo $del_date
cp nohup.out /需要将日志移去的目录/mylogs-java-${current_date}
echo "" > nohup.out
echo "del-----------------"
rm -rf /需要将日志移去的目录/mylogs-java-${del_date}

日志做好了下面可以使用 Cron 做定时任务设置一个固定的时间执行这个脚本。 crontab -e

Jul 15 15:58:01 S2 crond[950254]: (root) PAM ERROR (Module is unknown)
Jul 15 15:58:01 S2 crond[950254]: (root) FAILED to authorize user with PAM (Module is unknown)
Jul 15 15:58:40 S2 crontab[950269]: (root) BEGIN EDIT (root)

于是我开始翻阅各种资料,发现 /etc/pam.d/cron 中的配置​​​里面有 system-auth 这个模块,里面的模块我之前领导让我做过安全的限制。。。我这个时候才想起来这个事情。这是当初的安全机制造成的。。。。。。但是我又不能删了,所以我只能使用另外一种不需要借助三方就能使用的定时器。然后我选择使用了 Systemd Timers

本人是刚刚入职工作的小开发,码龄两年。工作中经常遇到一些问题,也解决不少的问题,现在就是想要分享一下我的这一点点的经验,我也是刚刚开始分享,一定又好多的不足的地方,欢迎各位前辈留言指正、批评。晚辈会虚心请教,并改正。

感谢各位观看文章,今天有事情没办法一口气写完,索性分成了上下两篇,下篇会及时更新出来的。这一篇就当做简单的 cron + 脚本 的基本使用吧 ~~~ 总之欢迎各位交流讨论