我有 5 个 Web 应用程序。目录结构类似于以下内容:
/var
`- /www
`- /domains
`- /domain1
`- /public_html
`- /crontabs
`- /crons
`- /domain2
`- /public_html
`- /crontabs
`- /crons
`- /domain3
`- /public_html
`- /crontabs
`- /crons
.
.
.
.
.
每个应用程序都有自己的 cron 列表 [并且这些文件包含有效的语法,例如 crontab -e]。目前,由于这是一个测试和隔离的服务器,因此所有应用程序都在同一用户下运行。我知道 cron、/etc/cron.d、/etc/cron.interval(间隔 = hourly|daily|weekly)、/var/spool/crontabs/。
我的问题是:有没有 /etc/cron.d 的替代方案,但具体到用户,我只需符号链接这些 cron,它们就会被执行?我更喜欢这样的解决方案,因为这些 cron 有时会由开发人员更新。
在 #ubuntu ikonia 上,我向 google 建议如何包含 cron,我试了但找不到这样的解决方案。如果有地方可以做的话:
include /var/www/domains/*/public_html/crontabs/crons
那真是太棒了。
[编辑] 我愿意稍微改变一下 crons 文件。
答案1
根级crontabs 可以符号链接到 /etc/cron.d/ 。该文件夹中的所有内容都以 root 身份执行。root 级别的 crontab 条目可以以用户级别执行,但这是一种解决方法,超出了问题的范围。此类符号链接的示例:
# ln -s /path/to/crontab /etc/cron.d/
用户级crontab 不能通过符号链接或任何类型的直接文件管理来创建 - crontab 管理专门设计用于防止用户这样做。所有用户级 crontab必须使用“crontab”命令创建,以便所有用户级 crontab 都进行语法检查,并在同一位置进行后台处理。
幸福地,‘crontab’ 的作用不仅仅是打开编辑器。该命令将接受整个文件。例如,对于拥有 $DomainName 的用户,
$ crontab /var/www/$DomainName/public_html
因此,将用户级 crontab 添加到 webapp 启动脚本应该非常容易。
在 Ubuntu 16.04 及更新版本中,cron 作业正在慢慢被 systemd 计时器取代,但这也超出了问题的范围。
答案2
在我的 Web 服务器上,我为每个虚拟服务器指定一个 Linux 用户。每个 Linux 用户都有自己的 crontab。