这个 Chef 食谱的 cron 在哪里?

这个 Chef 食谱的 cron 在哪里?

我已经添加并使用此配方成功设置和部署了一个实例:

cron "haproxy_log" do command "logrotate /etc/logrotate.d/haproxy" minute '15' end

但是当我查看时,/etc/crontab我没有看到它在那里。 cron chef 将其 cron 作业放在哪里?

当我这样做时,sudo crontab -u root -l我看到了我的工作。但是我怎么看不到它呢/etc/crontab

cron 没有运行,但我可以通过执行以下操作手动运行该命令: sudo logrotate /etc/logrotate.d/haproxy- 为什么会发生这种情况?

答案1

你看到的 crontabsudo crontab -u root -l是普通用户的用户的 crontabroot, 位于:

  • /var/spool/cron/crontabs/root(Debian、Ubuntu、HP-UX、SGI IRIX)
  • /var/spool/cron/root(CentOS、RedHat、RHEL、Fedora、IBM AIX 及公司)
  • /var/cron/tabs/root(FreeBSD、OpenBSD、NetBSD)
  • /usr/lib/cron/tabs/root(Mac OS X)

这些文件不应直接编辑,而应始终使用命令crontab

命令root的 crontab也总是以 的方式运行root,即

  • 它们有正常的m h dom mon dow command语法
  • 而在全系统 /etc/crontab并且/etc/cron.d/*您还必须指定用户:

    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    
    # m h dom mon dow user  command
    

厨师食谱参考中也隐藏着对此的暗示,资源cron

计划任务资源需要访问一个crontab程序,通常是 cron。

警告:计划任务资源仅应用于修改 crontab 文件中的条目。使用cookbook_file或者模板资源将 crontab 文件添加到 cron.d 目录中。cron_d轻量级资源(位于计划任务crontab 文件的另一种管理方式是使用 cookbook 来管理 crontab 文件。

答案2

在除 AIX 和 Solaris 之外的 Unix 平台上,Chef 使用典型的 crontab 语法创建一个临时文件,然后将其提供给命令/usr/bin/crontab(来源)。

根据您的操作系统/发行版,位置因实现而异cron。例如在 Debian/Ubuntu 上 ( man 8 cron):

cron 在其假脱机区域 (/var/spool/cron/crontabs) 中搜索 crontab 文件(以 /etc/passwd 中的帐户命名);找到的 crontab 文件将加载到内存中。请注意,不应直接访问此目录中的 crontab - 应使用 crontab 命令来访问和更新它们。

cron 还会读取 /etc/crontab,但格式略有不同(请参阅 crontab(5))。在 Debian 中,/etc/crontab 的内容已预定义,用于运行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 下的程序。此配置特定于 Debian,请参阅下面 DEBIAN SPECIFIC 下的说明。

此外,在 Debian 中,cron 会读取 /etc/cron.d 目录中的文件。cron 将 /etc/cron.d 中的文件视为与 /etc/crontab 文件相同的文件(它们遵循该文件的特殊格式,即它们包含用户字段)。但是,它们独立于 /etc/crontab:例如,它们不会从中继承环境变量设置。此更改特定于 Debian,请参阅下面 DEBIAN SPECIFIC 下的注释。

和/etc/crontab一样,/etc/cron.d目录下的文件也会被监控变化,一般来说,系统管理员不要使用/etc/cron.d/,而是使用标准的系统crontab /etc/crontab。

长话短说:

  1. crontab目的地不由厨师管理
  2. 2017 年 Debian/Ubuntu cron 的典型默认值为/etc/cron.d/<filename>

相关内容