如何通过木偶删除 Cron 作业
How to remove Cron job through puppet
我想知道是否有任何方法可以删除通过 puppet 创建的 cron。当我将 "ensure => absent"
添加到我的清单时,它工作正常。但对我来说挑战是,我必须等待一个小时才能在我的客户端上 运行 我的傀儡代理,因为代理被配置为每小时 运行。我还必须手动编辑每个作业以添加 "ensure => absent"
.
除了向每个 cron 作业添加“"ensure => absent"”之外,还有其他方法可以删除 cron
例如,我们如何在不添加 "ensure => absent"
的情况下从所有应用服务器中删除 "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"', ],
}
}
这是我找到的解决方法。
在我的人偶 class 上,我创建了一个包含所有活动 cron 的数组。然后我会将这些列表传递给我的 bash 脚本。我的 bash 脚本将在我的客户端上安装并执行一次 puppet 代理 运行。
在我的 bash 脚本中,我将对通过 puppet 安装的所有 crons 进行 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
您无需等待 30 分钟,代理即可 运行
对人偶大师进行 "mco runall 5" 以在所有主机上激起傀儡代理 运行
然后您就可以使用 "ensure => absent" 而不必为 exec hack 而烦恼
我想知道是否有任何方法可以删除通过 puppet 创建的 cron。当我将 "ensure => absent"
添加到我的清单时,它工作正常。但对我来说挑战是,我必须等待一个小时才能在我的客户端上 运行 我的傀儡代理,因为代理被配置为每小时 运行。我还必须手动编辑每个作业以添加 "ensure => absent"
.
除了向每个 cron 作业添加“"ensure => absent"”之外,还有其他方法可以删除 cron
例如,我们如何在不添加 "ensure => absent"
的情况下从所有应用服务器中删除 "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"', ],
}
}
这是我找到的解决方法。 在我的人偶 class 上,我创建了一个包含所有活动 cron 的数组。然后我会将这些列表传递给我的 bash 脚本。我的 bash 脚本将在我的客户端上安装并执行一次 puppet 代理 运行。
在我的 bash 脚本中,我将对通过 puppet 安装的所有 crons 进行 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
您无需等待 30 分钟,代理即可 运行
对人偶大师进行 "mco runall 5" 以在所有主机上激起傀儡代理 运行
然后您就可以使用 "ensure => absent" 而不必为 exec hack 而烦恼