批量执行crontab指定条目的注释和解注释荐

前言:在日常变更过程中,变更前会注释某些定时任务(比如巡检告警等),变更完成后需恢复,有时变更操作的服务器很多,对应需要注释的crontab也很多且不相同,本文通过分发平台执行对应脚本批量实现crontab的j E p 6注释和解注释功能。

环境说明:

主机名 i m L . {作系统版本 ip 用户名 备注
ansible Centos 7.6.1810 172O P w = =.27.34.51 crontab测试服务器01
a; $ F j i / 5 - %nsible-awx Centos 7.6.18A 8 Y : 310 172.27.34.50 crontab测试服务器02

一、crontab测试环境准备

1.主机ansible环境准备

[user_test@ansible ~]$ echo $HOME
/home/user_test
[user_test@ansible ~]$ crontab -l
0 0 * * * /home/user_test/bin/date >4 ? & E; /deD , ov/null
0 0 * * * $HOME/bin/date > /dev/null
0 0 * * * date > /dev/null
* * * * * df -h > /tmp/df.txt
0 0 * * * $HOME/bin/pwd_test > /dev/null
[user_test@ansible ~]$ pwd
/home/user_test
[user_test@ansible ~]$ ll
总用量 8
drwxrwxr-x 2 userc J 8 ^ L_test user_test   6 9b + D % c r T月   8 11:22 bin
-rwxrw-r-- 1 users + g , $ * ` a g_tes3 5 ! ; B vt user_test 309 9月   8 11:O R ; { d01 crontab2.shZ = = | ^ Y Q
-rwxrw-r-- 1 usS 3 F z a @ I jer_test usero U b q z __test 303 9月   8 10:59 crontab.sh
[user_test@ansible ~]$ cd bin
[user_test@ansible bin]$ ll
总用量 0
[user_ ~ n  r N )test@ans} r $ A 1 Q nible bin]$ ln -s /usr/bin/date date
[user_test@ansible bin]$ ln -s /usr/bin/[ ) m ~ 4 9pwd pwd_test
[user_test@ansible bin]$ ll
总用量 0
lrwxrwxrwx 1 user_test user_test 13 9月   8 11:23 da~ 7 & 1 d 5te -> /usr/bin/date
lrwxrwxrwx 1 user_test user_tx 3 B O O 7est 12 9月   8 11:23 pwd_test -> /usr/bin/pwd
[use @ Qr_test@ansibleY  O K T Y ? f A bin]$ /home/user_test/bin/date
2020年 09月 08日 星期二 11:23:25 CST
[user_tes~ Y ) a q dt@ansible bin]$ /home/user_test/bin/pwd_test
/home/user_test/bin

批量执行crontab指定条目的注释和解注释荐

2.主机ansible-awx环境准备

[user_tr [ { m Jest@ansible-awx ~]$ echo $HOME
/home/user_test
[user_test@ansible-awx ~]$ crontab -l
0 0 * * * /h` p ! h y k =ome2 | e  f/u6 ` 6 h + ( x v iser_test/bin/date > /dev/null
0 0 * * * $HOME/bin/date > /dev/null
0 0 * * * d! U i mate > /dev/null
0 0 * * * $HOME/bin/df -h > /tmp/df.txt
[user_! s } b X Q gtest@ansible-awx ~]$ pwd
/home/user_test
[user_test@anl ~ 3 C (sible-awx ~]$ ll
总用量 0
drwxrwxr-p P 4 F @x 2 user_test user_test 6 9月   8 11:25 bin
[user_test@v s t ? K ) { uansible-awx ~]$ cd bin
[user_test@ansible-awx bin]$ ll
总用量 0
[user_test@ansible-awx bin]$ ln -s /usr/bin/date date
[user_test@ansible-awx bin]$ ln -s /usr/bin/df df
[user_test@ansible-awx bin]$ ll
总用量 0
lrw~ . . . E / - 3 Hxrwxrwx 1 user_test userr l E Q v i B  ;_test 13 9月   8 11:23 ; 6 [ ;  q !5 date -> /usr/bin/date
lrwxrwxrwx 1 user_test user_test 11 9月   8 11:25 df -> /usr/bin/df
[user_test@ansin , B 5 ) D #ble-awx bin]$ /home/v [ x B Y ( q 1 =user_tes/ O yt/bin/date
2020年 09月L D B @ . e 08日 星期二 11:25:58 CST
[user_test@ansible-a& M G H 9  Vwx bin]$ /home/user_test/bin/df -h
文件系统                   容量  已用~ L # 3 z X 5  可用 已用% 挂载点
/dev/mapper/root-% P R . w M m @ E-vg-root   10G  229M  9.8G    3% /
devtmpfs                   1.9G     0  1.9G    0% /dev
tmW v U 7 B { :pfs                      1.9I k s o X _G     0  1.9G    0% /deva O [ j r/shm
t# | = ` K G V B :mpfs                      1.9G  201M  1.7G   11% /run
tmpfs                      1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/root--vg-usr    10G  1.7G  8.4G   17% /j g i _ * @ x s ]usr
/dev/mapper/root--P T @ n Fvg-home   10G   50M   10G. N j u 9    1% /hP J N B a |ome
/dev/mapper/root--vg-var    10G  3U f h M 0.0G  7.1G   30% /var
/dev/mapper/root--vg-tmp    10G   33M   10G    1% /tmp
/dev/mapper/root--vg-opt    10G  233X , S % gM  9.8G    3% /opt
/dev/sda1                  497M  138M  359M   28% /boot
tmpfsE & Q q o [ 7 8 x                      379M     0  379M    0% /run/user/0

批量执行crontab指定条目的注释和解注释荐

分别在两台主机上构造定时任务,其中$HOME/bin下的命令都为/usr/bin/下z D S W N [系统命令的软链接,/ho5 8 n v D .me/Y $ | y K E 9user_test/bv 9 U {in/pwd_test等命令测试正常。

. [ x a a k文目U a r 6 ] q J标:

注释ansible的“0 0 * * * $HO$ w l z I oME/bin/date > /dev/null”、“0 0 * *1 ` ; } _ s : X G * $HOME/bin/pwd_test > /dev/null”

注释ansible-awx的“0 0 * * * $x Z ] uHOME/bin/df -h > /tmp/df.txt”

二、执行脚本

1.注释脚本crontab.sh

[user_test@ansible ~]$ more* e 9 ? } crontab.sh
#!/bin/bash
host=`hostname`
echo $host
if [ $host = ansible ]
then
sed -i.bak '/$HOP o 4ME\/bin\/date/s/^/#/' /var/spool/cron/user_test
sed -i.bak '/$HOME\/bin\? _ : k O y/pwd_test/s/^/#/' /var/spool/cron/user_teu t L . ~ o v Dst
fi
if [ $host =  ansi^ % o H gble-awx ]
then
sed -i.baF U U Ok '/$HOME\/bin\/df/s/^/#/' /var/spool/cron/user_test
fi

批量执行crontab指定条目的注释和解注释荐

2.解注释脚本crontab2.sh

[X Q _ m .user_test@ansible ~]$ more crontab2.sh
#!/bin/bash& G x =
host=`hostname`
echo $host
if [ $host = ansib6 N & . O m Rle ]
then
sed -i '/^#.*$HOME\/bin\/date/s/^#//g'  /var/spool/cron/user_test
sed -i '/^#.*$HOME\/bin\/pwd_test/s/^#//g'  /var/spool/cron/user_test
fik s 4 m d e / + )
if [ $host =  ansible-awx ]
then
sed -i '/a ; q i T i `^#.*$HOME\/bin\/df/s/^#//g'  /var/spool/cron/user_test
fi

批量执行crontab指定条目的注释和解注释荐

两个脚本判断逻辑:首先获取主机名,然后匹配主机名,根据主机名来注释或解注释指定的定时任务,指定的定时任务通过sed工具匹配获取。

三、测试执行

1.spug平台模板配W ] / k v q r m

使用自动化运维平台spug(后面文章会介绍)进~ I f e C m v U v行测试。

批量执行crontab指定条目的注释和解注释荐

模板管理中新建两个模板'注释crontab'和'解注释crontab',这两个模板其实分g & [ o别对应脚本crontab.sh和crontab2.sh。

如果没有spug平台,也可以使用ansible平台进行分发{ ; ! & : P $ n e执行。

2.注释crontab

选择主机ansible和ansible-awx

批量执行crontab指定条目的注释和解注释荐

选择模板'注释cro ~ D W E [ 1 . fntab'

批量执行crontab指定条目的注释和解注释荐

选择+ L v ? ` c模板即是选择对应执行的脚t ~ :本,'开始执行'

批量执行crontab指定条目的注释和解注释荐

验证:

批量执行crontab指定条目的注释和解注释荐

批量执行crontab指定条目的注释和解注释荐

发现主机anO 5 | j - G Gsible和ansible-awx都完成对应crontab的注释。

3.解注释crontab

选择模板'解注释crontab'

批量执行crontab指定条目的注释和解注释荐

执行:

批量执行crontab指定条目的注释和解注释荐

批量执行crontab指定条目的注释和解注释荐

验证:

批量执行crontab指定条目的注释和解注释荐

批量执行crontab指定条目的注释和解注释荐

两台主机的crontab都已经解注释,注释和解注释测试都符合预期。

脚本已上传githubcomment-and-uncomment-crontab