为什么 crontab 不存储在用户主目录中?

Mar*_*Eve 36 cron directory-structure home

我很想知道:为什么 crontab 存储在 /var 而不是用户的主目录中?隔离这些文件进行升级非常痛苦,但我怀疑有一个合乎逻辑的原因......

phe*_*mer 42

我能想到的几个原因:

  • 在企业环境中,您可以拥有数千名用户。如果是这样,cron 必须每分钟扫描每个用户的目录以检查 crontab 文件(是否已创建、删除或修改)。
    通过将它们保存在一个位置,它不必进行这种密集扫描。
  • 主目录可能并不总是可用。如果主目录是 autofs 挂载,则它们可能未挂载。让 cron 每分钟检查一次它们会导致它们被挂载,并防止它们因不活动而卸载。此外,如果主目录被加密,并用用户的密码解密,除非用户登录并解密/挂载,否则 cron 将无法访问主目录。
  • 主目录可以跨主机共享。如果主目录是网络共享,则同一主目录将出现在多个主机上。但是您可能不希望您的 cron 作业在每台主机上运行,​​只在其中一个主机上运行。

  • 但你对第 3 点是正确的;根据 [wikipedia](http://en.wikipedia.org/wiki/Cron#History) crontabs *最初在 $HOME 中,直到“[Bell lab devs] 将 Unix at 命令合并到 cron 中,移动了 crontab 文件从用户的主目录(不是特定于主机的)到一个公共的特定于主机的假脱机目录......”这也是创建 `crontab` 命令的时候,它可能已经处理了重新加载问题。 (7认同)
  • @Patrick 或者当程序使用 `utimes` 系统调用时,以假脱机目录路径作为其参数,来设置目录的 mtime,这就是 Vixie cron 的 `crontab` 命令所做的。 (2认同)
  • 除非通过 crontab -e 对其进行编辑,否则早期版本的 cron 肯定不会对用户 crontab 文件进行更改。过去我在 Solaris 上被这个发现了,请参阅这个几十年前的手册页 http://www.manpages.info/sunos/cron.1.html (2认同)
  • 在 Solaris 10 上,`crontab -e`,即 setuid root,在用户编辑 crontab 后向 `/etc/cron.d/FIFO` 写入一条消息。 (2认同)