2013-10-24 77 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