使用cron表达式在puppet中创建crontab任务



我正在尝试使用Puppet创建一个crontab任务。问题是puppet要求您设置诸如"小时"、"分钟"、"月"等参数,以定义任务必须在哪个时刻执行。我找不到使用cron表达式的参数,例如"*/5 * * * *"或者"15 6 * * 1"。有什么办法吗?

对于通配符(*),您只需要将参数留空,例如,我创建了;

class scratch::crontest {
cron { 'logrotate1':
command => '/usr/sbin/logrotate --version',
user    => 'root',
hour    => '*/5',
}
cron { 'logrotate2':
command => '/usr/sbin/logrotate --version',
user    => 'root',
hour    => '15',
minute  => '6',
}
}

我将它应用于一个节点,并创建了;

[root] # crontab -l
# HEADER: This file was autogenerated at 2022-04-20 16:53:05 +0000 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: logrotate1
* */5 * * * /usr/sbin/logrotate --version
# Puppet Name: logrotate2
6 15 * * * /usr/sbin/logrotate --version

关于这个的Puppet文档似乎只存在于Puppet 5.5,但如果你在Puppet服务器上或有代理的节点上,你可以运行puppet describe cron来查看你的版本的文档。

我最后写的是:

#In my parameters, so I can pass the array using Foreman, for example
Array $cron_jobs = [['58 7 * * *', '/eloi/ksh/eloi-batch/scripts/purgeRepertoireLogTrace.ksh >/dev/null 2>&1', 'purgeRepertoireLogTrace'], ['*/5 * * * *',
'/eloi/ksh/eloi-batch/scripts/replicationReferentielFichier.ksh >/dev/null 2>&1', 'replicationReferentielFichier']],
...
$cron_jobs.each |$cron_job| {
$cron_expr = split($cron_job[0], ' ')
cron{ "cron-${cron_job[2]}":
command     => "${cron_job[1]}",
minute      => "${cron_expr[0]}",
hour        => "${cron_expr[1]}",
monthday    => "${cron_expr[2]}",
month       => "${cron_expr[3]}",
weekday     => "${cron_expr[4]}",
user        => "${appuser[0]}",
environment => "PATH=/bin:/usr/bin:/usr/sbin",
}
}

使用split函数,我能够将表中的cron表达式转换为Puppet cron资源的参数。

我可以把整个cron字符串放在一个单维数组中,但是我的一些命令包含空格,所以它不能正常工作。它还使我有机会添加另一个字段来构建资源名。

最新更新