【问题标题】:How to remove Cron job through puppet如何通过 puppet 删除 Cron 作业
【发布时间】:2018-04-20 15:14:17
【问题描述】:

我想知道是否有任何方法可以删除通过 puppet 创建的 cron。当我将"ensure => absent" 添加到我的清单时,它工作正常。但对我来说挑战是,我必须等待一个小时才能在我的客户端上运行我的 puppet 代理,因为代理配置为每小时运行一次。我还必须手动编辑每个作业以添加"ensure => absent"

除了在每个 cron 作业中添加“确保 => 缺席”之外,还有其他方法可以删除 cron 吗

例如,我们如何从所有应用的服务器中删除“job1”而不添加“确保=>缺席”

    class cron::my_cron
    ( 
    )
    {
      cron::hourly { 'Job1':
        minute      => '0',
        user        => 'root',
        command     => 'cmd',
        environment => [ 'MAILTO=root', 'PATH="/usr/bin:/bin"', ],
      }

      cron::hourly { 'job2':
        minute      => '0,5,10,15,20,25,30,35,40,45,50,55',
        user        => 'root',
        command     => 'cmd',
        environment => [ 'MAILTO=root', 'PATH="/usr/bin:/bin"', ],
      }
    }

【问题讨论】:

    标签: puppet


    【解决方案1】:

    这是我找到的解决方法。 在我的木偶类中,我创建了一个包含所有活动 cron 的数组。然后我会将这些列表传递给我的 bash 脚本。一旦 puppet 代理在我的客户端上运行,我的 bash 脚本就会安装并执行。

    在我的 bash 脚本中,我将对通过 puppet 安装的所有 cron 进行 grep,然后循环每个 cron 作业并与我的活动 cron 数组进行比较,如果它与我的活动 cron 列表不匹配,将执行 rm 命令删除 cron 条目。

     class cron ( 
            $active_cron=['cron1', 'cron2', 'cron3', 'cron4')
         )
      {
    
           file {
            '/usr/sbin/remove_cron.sh':
              ensure => present,
              mode   => 755,
              owner  => 'root',
              group  => 'root',
              content => template('cron/remove_cron.erb'),
              notify => Exec['remove_cron'],
           }
    
           exec { 'remove_cron':
              command => "/usr/sbin/remove_cron.sh >> /var/log/remove_cron.log",
              path    => '/usr/local/bin/:/bin/:/usr/bin/',
              require => File['/usr/sbin/remove_cron.sh'],
              refreshonly => true,
           }
        }
    

    我的 Bash 脚本模板

        #!/bin/bash
        LIST='<%= @active %>'
        grep -il puppet* /etc/cron.d/* | grep -il puppet* /etc/cron.d/* | awk -F"/" '{print $NF}' |while read CRON
        do
                FOUNDIT=$(echo $LIST |grep "\"$CRON\"" |wc -l)
                if [ $FOUNDIT -eq 0 ]
                then
                        echo "$(date) : Cron $CRON Removed"
                        rm -r /etc/cron.d/$CRON
                fi
        done
    

    【讨论】:

      【解决方案2】:

      您不必等待 30 分钟让代理运行

      在 puppetmaster 上执行“mco runall 5”以激发 puppet 代理在所有主机上运行

      然后您可以使用“确保 => 缺席”,而不必为 exec hack 而烦恼

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多