对于Debian及其衍生产品,我们该如何理解以下看似矛盾的事实:
/etc/crontab
并且/etc/cron.d/*
有一个用户字段,这意味着作业正在以用户身份运行(root 或非根)。中的作业
/etc/crontab
和/etc/cron.d/*
系统作业不是特定于用户的作业吗?
如果您想以 root 或非 root 用户身份运行作业,您将在哪里添加作业:/etc/crontab
、/etc/cron.d/*
或/var/spool/cron/crontab/<user>
?
斯蒂芬的评论/etc/cron.d下的文件是如何使用的?澄清了很多,但我还是不明白
系统作业是适用于整个系统的作业。用户特定作业是代表特定用户运行的作业;通常,用户在登录时手动执行但他/她希望定期自动执行的任务 - 例如特定文件的备份,或远程开发存储库的刷新,或邮件处理,或镜像网站
谢谢。
答案1
我倾向于使用各种 cron 配置文件,如下所示:
/var/spool/cron/crontab
由“真实”用户使用(IE用户对应于使用系统的人类),使用 进行编辑crontab -e
;/etc/cron.d
用于包提供的 cron 作业,它可以作为“系统”用户运行(例如logcheck
对于logcheck
的 cron 作业);正如在回答有关该主题的其他一些问题时提到的,/etc/cron.d
旨在供软件包使用,至少在基于 Debian 的系统上;/etc/crontab
将用于本地定义的系统作业,以 root 身份运行,但我发现/etc/cron.{hourly,daily,weekly,monthly}
这些作业更方便。
在我的评论中,“用户”是指“人类支持的用户”(如果您允许我这样表达的话)。在我看来,以“系统用户”(root 用户或其他用户)身份运行的作业都是系统作业。
从 Debian 打包的角度来看,Debian 政策描述了推荐的做法关于 cron 作业:总之,/etc/cron.{hourly,daily,weekly,monthly}
如果合适就使用,/etc/cron.d
否则使用。因此,在所有五个目录中看到包提供的作业是正常的。
答案2
下面的 crontab/etc
只能由 root 手动编辑(或在安装某些软件包时由 root 隐式编辑)。这些 crontab 通常用于安排与系统上的服务相关的作业。因此,这些都是“系统工作”。其中一些服务很可能以 root 以外的用户身份运行。
中的假脱机 crontab/var
是用户特定的 crontab。用户应该用来crontab -e
编辑他们自己的个人 crontab(对于 root 来说这可能也是合理的事情)。未绑定到系统上任何特定服务的用户(即人类)不应需要在 下的 crontab 中以自己的名义运行 cron 作业/etc
。