2013-10-24 78 views
1

我对使用puppet的cron类型的environment attribute感到困惑。这似乎是一个奇怪的地方设置路径,因为如果我有多个cron作业,我想设置它似乎会碰撞。除了每个cron工作的特定工作之外,是否不应将其设置在对用户来说全球所有cron作业的地方?用木偶设置cron环境变量

回答

0

本,在我看来,它对cron工作非常有意义。考虑一下,举个例子:在PHP中有一个名为Composer的依赖管理工具,并且说我想通过cron安排自动更新到我的依赖关系。如果有很多依赖关系和/或只需要很长时间来更新它们,则该工具将超时,这就是为什么它接受COMPOSER_PROCESS_TIMEOUT环境变量的原因。因此通过设置

environment => 'COMPOSER_PROCESS_TIMEOUT=2000', 

我会有效地改变这种特殊情况下的超时而不触及其他任何东西。

希望它是有道理的,并清除空气一点。

+0

我明白为什么你可能想为你的特定cron作业设置一个环境变量,但是我仍然不明白如何设置影响多个cron作业的全局环境变量,比如PATH。这是这个问题真正要问的部分。 –

+0

Ben,再次阅读您的问题,我能想到的唯一一件事情就是: Cron {= {'PATH =/bin:/ usr/bin:/ usr/sbin', } 这将为所有cron资源设置“环境”,我相信您可以通过连接到默认值来添加更多环境变量,例如: cron {“my-command” environment +>'...', } –

+1

不起作用:“所有资源规范都要求名称”。如果我指定了一个名称,那么我得到:“ - ”:15:错误的命令 crontab文件中的错误,无法安装。 –

0

我不相信env变量会相互冲突。 cron资源似乎在命令执行时设置变量。所以它不应该说在其他cron作业期间设置。

例如。

# Puppet Name: pe-mcollective-metadata 
0,15,30,45 * * * * /opt/puppet/sbin/refresh-mcollective-metadata 
# Puppet Name: report_baseline 
0 20 * * * PATH=/opt/puppet/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin /opt/puppet/bin/puppet inspect 1> /dev/null 

所以,你可以在这里看到的是,刷新mcollective元数据的工作没有PATH变量集跑,但report_baseline工作做的时候。

+1

我测试了这个以及在Ubuntu/Puppet 3.3上,环境变量在作业前设置在一个单独的行*中。 – Alex