生产环境定时任务解注释

Posted loong576

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产环境定时任务解注释相关的知识,希望对你有一定的参考价值。

背景

最近遇到一个坑,在生产环境用自动化脚本执行注释和解注释时有部分定时任务没解开。

环境模拟

[root@node01 ~]# crontab -l
*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1

注释脚本

[root@node01 ~]# sed -i  /$HOME\\/sbin\\/sms_alarm.sh/s/^/#/  /var/spool/cron/root
[root@node01 ~]# crontab -l
#*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1

注释脚本没问题,执行后会在行首新增#

解注释

[root@node01 ~]# crontab -l
#*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1
[root@node01 ~]# sed -i /^#.*$HOME\\/sbin\\/sms_alarm.sh/s/^#//g /var/spool/cron/root
[root@node01 ~]# crontab -l
*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1

执行注释脚本,发现定时任务被解注释,看似没问题,其实在生产环境中如果都用自动化方式,一般不会有问题,因为注释和解注释都是分发脚本至各台服务器自动执行,但是不能排除偶尔应急或手动操作,这时定时任务就可能会注释两次或多次,模拟如下:

[root@node01 ~]# crontab -l
##*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1
[root@node01 ~]# sed -i /^#.*$HOME\\/sbin\\/sms_alarm.sh/s/^#//g /var/spool/cron/root
[root@node01 ~]# crontab -l
#*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1

生产环境定时任务解注释_生产环境

本次就遇到了这种问题,由于各种原因导致定时任务注释时前面不止一个#,解注释脚本只能去除一个,导致定时任务没能放开。

解注释脚本修复

[root@node01 ~]# crontab -l
###*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1
[root@node01 ~]# sed -i /^#.*$HOME\\/sbin\\/sms_alarm.sh/s/^#*//g /var/spool/cron/root
[root@node01 ~]# crontab -l
*/10 * * * * $HOME/sbin/sms_alarm.sh 1>/dev/null 2>&1

生产环境定时任务解注释_生产环境_02只需要在sed脚本替换#时新增一个*即可,代表匹配一个或多个#


问题解决,完美!





以上是关于生产环境定时任务解注释的主要内容,如果未能解决你的问题,请参考以下文章

定时任务汇总

生产环境Crontab专业实例

批处理+定时任务实现定时休息提醒

Wildfly下定时任务执行两次

使用Maven自动打包配置文件生成开发环境,测试环境,生产环境

Spring Boot 定时任务