我正在设置必须以 root 身份运行的常规系统维护任务。我计划使用 Ubuntu 14.04 LTS 附带的 cron 作为默认设置。
我看到前任管理员(现已离开公司)直接编辑了 /etc/crontab。但是我了解到另一种可能的方法是使用crontab -e
root 权限。是否有任何令人信服的理由来使用其中一种,还是取决于个人喜好?
答案1
值得注意的是,个人 crontab ( crontab -e
) 中的作业始终以其所有者的身份执行,其中/etc/crontab
包含一个额外的必填<user>
字段,允许管理员将作业配置为以非 root 用户身份运行。
编辑系统 crontab 或为 root 设置个人 crontab 可能更具可移植性,不特定于某些 Linux 发行版,而且可能更方便对于一个人来说保持所有作业都在一个文件中,但是:
我个人赞成第三种选择:对于每个计划任务,删除
/etc/cron.d/
包含 cron 代码片段的文件- 相关
/etc/cron.[hourly |daily |weekly |monthly]
目录中的可执行文件(脚本)。
这更容易编写脚本(您可以简单地创建/覆盖/删除这些文件,而不必在单个 crontab 文件的内容中乱搞),并且可以与配置管理工具很好地配合使用,而这正是包管理器已经在做的事情。
中的作业/脚本/etc/cron.[hourly |daily |weekly |monthly]
始终以 root 身份执行,其中的 cron 片段/etc/cron.d/
允许设置自定义计划以及以<user>
具有 中的相同必填字段的不同用户身份运行/etc/crontab
。
答案2
据我所知,crontab -e
它还有一个额外的优势,即在安装 crontab 之前会验证语法,如果出现错误,它会出错并恢复以前的版本。这样,如果语法错误,之前运行的所有内容都不会突然停止。我认为最佳做法是使用实用程序,例如运行visudo
而不是/etc/sudoers
直接编辑。
答案3
为了确保添加需要特定用户权限的 cron 作业,我个人使用以下命令:
# crontab -u <user> -e
您sudo
也可以添加。
正如@rackandboneman所说,没有必要弄乱/etc/cron.d/文件。如果问题与用户的cron作业有关,请使用crontab
命令的功能。
答案4
这其实是一个风格问题,操作系统提供多种方法是有原因的。只要保持一致,不要混搭,如果你不想让别人感到困惑(或者在一段时间不处理系统之后让你自己感到困惑)——如果很难看到整个主机上实际安排了哪些任务,那么往往会以令人不快的意外告终。