我有一个 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”想要克服的问题......?