生产环境定时任务解注释

逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述生产环境定时任务解注释相关的知识,希望能为你提供帮助。
背景最近遇到一个坑,在生产环境用自动化脚本执行注释和解注释时有部分定时任务没解开。
环境模拟

[root@node01 ~]# crontab -l
*/10 * * * * $HOME/sbin/sms_alarm.sh1> /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.sh1> /dev/null 2> & 1

注释脚本没问题,执行后会在行首新增#
解注释
[root@node01 ~]# crontab -l
#*/10 * * * * $HOME/sbin/sms_alarm.sh1> /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.sh1> /dev/null 2> & 1

执行注释脚本,发现定时任务被解注释,看似没问题,其实在生产环境中如果都用自动化方式,一般不会有问题,因为注释和解注释都是分发脚本至各台服务器自动执行,但是不能排除偶尔应急或手动操作,这时定时任务就可能会注释两次或多次,模拟如下:
[root@node01 ~]# crontab -l
##*/10 * * * * $HOME/sbin/sms_alarm.sh1> /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.sh1> /dev/null 2> & 1


本次就遇到了这种问题,由于各种原因导致定时任务注释时前面不止一个#,解注释脚本只能去除一个,导致定时任务没能放开。
解注释脚本修复
[root@node01 ~]# crontab -l
###*/10 * * * * $HOME/sbin/sms_alarm.sh1> /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.sh1> /dev/null 2> & 1

只需要在sed脚本替换#时新增一个*即可,代表匹配一个或多个#


问题解决,完美!



【生产环境定时任务解注释】






    推荐阅读