可以在 /etc/cron.d/ 中使用符号链接吗?

Luí*_*ira 28 cron configuration-management symbolic-link

我正在尝试实现一种配置机制,允许在某个项目中通过 svn 部署一个 cron 配置。

我立即想到我应该做的是将 /etc/cron.d/ 中的符号链接创建到我项目的 cron 文件(该文件又由 vcs 控制),但这似乎不起作用。

我发现一些旧的论坛消息提到不支持符号链接,而其他人则表示支持。是哪个?

有没有其他方法或任何其他好方法来实现这一目标?

小智 29

根据 man crond

警告

所有 crontab 文件都必须是常规文件或常规文件的符号链接,除了所有者之外,它们不能对任何其他人执行或写入。可以通过在 crond 命令行上使用 -p 选项来覆盖此要求。如果使用 inotify 支持,则 cron 守护程序不会自动注意到符号链接 crontab 中的更改。cron 守护进程必须收到 SIGHUP 信号才能重新加载 crontab。这是 inotify API 的一个限制。

如果未安装 sendmail,将使用 syslog 输出而不是邮件。

它也惹恼了我,简而言之,是的,您可以使用符号链接,但是,如果不是常规文件或常规文件的符号链接,则必须使用-pswitch。

  • 您还会发现该文件必须归 cron 为其运行作业的用户所有;例如,如果符号链接 `/etc/cron.d/bobsjob` 指向用户“bob”拥有的文件,cron 将失败并显示系统日志消息 `WRONG FILE OWNER (/etc/cron.d/bobsjob)`。 (3认同)

Flo*_*nle 16

这具有安全隐患。/etc/cron.d/ 中的脚本由具有 root 权限的 root 运行。对非 root 用户拥有和可写的脚本进行符号链接是一个坏主意,因为您的系统可能会以这种方式受到损害


小智 6

我会检查你的 Ubuntu 版本的 cron 联机帮助页(我假设我们在这个论坛上谈论 Ubuntu!):

此目录中的文件必须由 root 拥有,不需要是可执行的(它们是配置文件,就像 /etc/crontab 一样)并且必须符合 run-parts(8) 使用的相同命名约定:它们必须仅由大写和小写字母、数字、下划线和连字符组成。这意味着它们不能包含任何点。

正如 Florian 指出的那样,如果该文件可由非 root 用户写入,这是一个安全漏洞,因为作业将由 root 运行(对于在文件中被指定为作业所有者的人)。还请注意,因此,

这个目录可以包含任何按照 /etc/crontab 中使用的格式定义任务的文件,即与用户 cron spool 不同,这些文件必须提供用户名来运行任务定义中的任务。

即在命令运行之前弹出用户名。

  • *这意味着它们不能包含任何点。*注意这一点。我在链接名称中加了一个点。这是我没有运行工作的罪魁祸首。另外:文件本身必须以 CRLF 结尾 (4认同)