動態 crontab 檔案?

動態 crontab 檔案?

是否可以讓 cron 從 shell 腳本的輸出接收指令,而不是讀取靜態檔案?

我試圖在一堆機器上管理 crontab,並且為每台機器維護單獨的 crontab 檔案是一件苦差事。我希望 cron 運行一個 shell 腳本,根據給定的機器是否分配給該作業來列印每個作業的 crontab 行。我可以這樣做嗎?

PS-我見過一些建議 Puppet/Chef/等。出於這個目的,但我認為這對於處理這個問題來說太過分了。

答案1

我認為在大多數發行版上執行此操作的最簡單方法是使用自動化部署工具,例如 Puppet/Chef 以及 /etc/cron.d 目錄。您可以將 crontab 放置在該目錄中,但它們使用以下格式而不是典型格式:

* * * * * <user> <command>

將運行 cron 的用戶在哪裡。

您似乎認為 Puppet 太過分了(事實並非如此),但目錄部分也適用於任何其他解決方案。

答案2

是的,你當然可以這麼做。只需設定產生 crontab 輸出所需的任何腳本,並將其 scp 到目標伺服器。

在那裡,靜態 cron 作業可以從任何方便的位置專門讀取這些 crontab 來執行。

答案3

這正是木偶和朋友的預期用途。

crontab如果您不喜歡發行版的套件管理的設定方式,那麼您唯一的條目可能是運行木偶代理。

外部腳本將位於傀儡大師上。在一個地方。對於所有機器。

如果考慮使用外部腳本已經是一個足夠的問題,我推薦 puppet。廚師肯定可以做類似的事情。

我開始使用木偶只是為了管理~/.ssh/authorized_keys多台機器上的木偶,這是一個類似的「小」問題。

答案4

一個流行的技巧是建立一個更新整個 crontab 的 crontab 條目。只要您的 shell 腳本不向crontab.

不過,我建議採用一種更容易管理的不同方法:有一個經常運行腳本的靜態 crontab 條目。讓腳本完成所有繁重的工作,確定何時執行某些內容。這樣,您仍然可以將 crontab 用作常規 crontab,而不必讓腳本了解每台電腦上可能運行的所有內容。

相關內容