我已经添加并使用此配方成功设置和部署了一个实例:
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。
长话短说:
crontab
目的地不由厨师管理- 2017 年 Debian/Ubuntu cron 的典型默认值为
/etc/cron.d/<filename>