我有一個 crontab,其中包含許多更新它的使用者。問題是,正因為如此,要知道誰對 cronjob 做了什麼修改並不容易。
我正在考慮創建一個腳本來使用diff
先前保存的版本執行 crontab 操作,以便至少能夠看到已更改的內容,但我認為也許對此有一個標準解決方案。管理 crontab 的最佳方法是什麼?
答案1
顛覆
我將 crontab 的內容置於顛覆控制之下,並且僅透過 授予該使用者存取權限sudo
。具體來說,我只允許人們透過該命令存取 a 命令,sudo
該命令將從 subversion 中獲取 head,並將其安裝為該特定用戶的最新 crontab。這將為您提供以下內容:
- 對誰做了什麼的審計追踪
- 如果出現問題,能夠回滾到先前的 crontab 文件
- 避免操作者對該特殊帳戶擁有過多的權限
它可能看起來太複雜,但如果你把它分成小塊,我所描述的並沒有什麼太複雜的。
多任務
另一種方法是使用工具/腳本,例如多任務。該工具將允許您管理 crontab 條目外部的 crontab 數據,以便您可以更好地控制誰/何時有權存取這些變更。
使用 Subversion 的範例
假設您設定了一個 SVN 儲存庫,您可以建立一個sudo
條目,允許使用者執行以下操作:
$ sudo deploy_app_cron.bash
該腳本的內部結構可以執行以下操作:
svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -
文件內容app_cron_data.txt
:
$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"
使用循環範例
因此 userA 想要更新 crontab 條目。他們將首先執行以下操作:
$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A mywksp/app_cron_data.txt
$ cd mywksp
現在,他們對 crontab 檔案進行一些編輯,app_cron_data.txt
並在完成後將它們提交到儲存庫。
$ svn commit -m "some msg.." app_cron_data.txt
要部署這些更改,他們需要執行以下sudo
命令:
$ sudo deploy_app_cron.bash
參考
答案2
正確的解決方案是正確使用 cron 並讓每個使用者都有自己的每個使用者 crontab。是否有一些省略的原因說明了您為什麼要以這種方式設定 crontab?甚至可能更可取的是使用每個使用者 crontab 和其他一些解決方法來解決這個「統一 crontab」想要克服的問題...?