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


25

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

我立即想到,我应该做的是/etc/cron.d/到我项目的cron文件(反过来由vcs控制)的明确符号链接,但这似乎不起作用。

我发现一些旧的论坛消息表示不支持符号链接,而另一些则表示支持。哪有

还有其他方法或其他好方法可以实现这一目标吗?

Answers:


27

根据 man crond

洞穴

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

未安装sendmail时,将使用syslog输出代替邮件。

它也使我烦恼不已,简而言之,可以使用符号链接,如果没有,regular files or symlinks to a regular file则必须使用-pswitch。


1
您还将发现该文件必须由正在为其运行作业的cron用户拥有。例如,如果符号链接/etc/cron.d/bobsjob指向用户“ bob”拥有的文件,则cron将失败,并显示syslog消息WRONG FILE OWNER (/etc/cron.d/bobsjob)
Craig Ringer

@CraigRinger我有一个名为“ www-data”的用户,拥有cron文件,我目前在系统日志中遇到WRONG FILE OWNER错误。如何使用用户“ www-data”使Cron执行。我不想让root拥有该文件。
CMCDragonkai 2014年

@CMCDragonkai sudo -u www-data crontab -e并将其添加到www-data用户的crontab中。然后它将以user身份运行www-data。记住要删除显式用户列,因为用户crontabs中不存在该列。
Craig Ringer 2014年

那会把文件放在里面etc/cron.吗?我对crontab工具的印象是将任务放置在其他位置。
CMCDragonkai 2014年

@CMCDragonkai您是正确的,crontab -e在这种情况下,调用不是您想要的。我在寻找但尚未找到一种以非root用户身份运行用户crontab的方法。
ACK_stoverflow '16

14

这具有安全隐患。/etc/cron.d/中的脚本由具有root特权的root用户运行。对那些非root用户拥有和可写的脚本进行符号链接是一个不好的主意,因为这样可能会损害您的系统


4

我会检查您的Ubuntu版本的cron手册页(我想我们在这个论坛上正在谈论Ubuntu!):

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

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

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

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


1
这意味着它们不能包含任何点。注意这一点。我在链接名称中有一个点。这是我没有工作的罪魁祸首。另外:文件本身必须以CRLF结尾
Gianluigi Zane Zanettini博士
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.