如何使用Ansible删除cron作业?

UsC*_*sCr 15 linux debian ansible

我有大约50个Debian Linux服务器,其中有一个糟糕的cron作业:

0 * * * * ntpdate 10.20.0.1
Run Code Online (Sandbox Code Playgroud)

我想用ntpd配置ntp sync,所以我需要删除这个cron作业.对于配置我使用Ansible.我试图用这个游戏删除cron条目:

tasks:
   - cron: name="ntpdate" minute="0" job="ntpdate 10.20.0.1" state=absent user="root"
Run Code Online (Sandbox Code Playgroud)

没啥事儿.

然后我运行这个游戏:

tasks:
   - cron: name="ntpdate" minute="0" job="ntpdate pool.ntp.org" state=present
Run Code Online (Sandbox Code Playgroud)

我在"crontab -l"的输出中看到新的cron作业:

...
# m h  dom mon dow   command
  0 *  *   *   *     ntpdate 10.20.0.1
#Ansible: ntpdate
0 * * * * ntpdate pool.ntp.org
Run Code Online (Sandbox Code Playgroud)

但是/etc/cron.d空的!我不明白Ansible cron模块是如何工作的.

如何使用Ansible的cron模块删除我手动配置的cron作业?

yda*_*coR 15

用户的crontab项下举行/var/spool/cron/crontab/$USER,如提到的crontab的手册页:

Crontab是用于安装,删除或列出用于驱动cron(8)守护程序的表的程序.每个用户都可以拥有自己的crontab,虽然这些是/ var/spool /中的文件,但它们不能直接编辑.对于在mls模式下的SELinux,可以为每个范围提供更多的crontabs.有关更多信息,请参阅selinux(8).

正如手册页和上面引用的那样,您不应该直接编辑/使用这些文件,而应该使用可用的crontab命令,例如crontab -l列出用户的crontab条目,crontab -r删除用户的crontab或crontab -e编辑用户的crontab条目.

要手动删除crontab条目,您可以使用crontab -r删除所有用户的crontab条目或crontab -e直接编辑crontab.

使用Ansible,这可以通过使用cron模块来完成,state: absent如下所示:

hosts : all
tasks :
  - name : remove ntpdate cron entry
    cron :
      name  : ntpdate
      state : absent
Run Code Online (Sandbox Code Playgroud)

但是,这依赖于Ansible放在crontab条目之上的注释,可以从这个简单的任务中看到:

hosts : all
tasks :
  - name : add crontab test entry
    cron :
      name  : crontab test
      job   : echo 'Testing!' > /var/log/crontest.log
      state : present
Run Code Online (Sandbox Code Playgroud)

然后设置一个crontab条目,如下所示:

#Ansible: crontab test
* * * * * echo Testing > /var/log/crontest.log
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果你有在Ansible的cron模块之外设置的crontab条目,那么你将不得不采取一种不太干净的方法来整理你的crontab条目.

为此我们只需要丢弃我们用户的crontab cron -r,我们可以通过shell调用它,看起来像这样:

hosts : all
tasks :
  - name  : remove user's crontab
    shell : crontab -r
Run Code Online (Sandbox Code Playgroud)

然后,我们可以使用其他任务来设置您想要保留的任务,或者正确使用Ansible的cron模块添加它们.