首页 > 解决方案 > 为什么在 dockerfile 中添加文件 /etc/crontabs/www-data 将使运行容器时 www-data 的 cron 作业(基于高山)

问题描述

我知道为用户 www-data 添加 cron 作业的正确方法是运行crontab -u www-data -e

所以要在 dockerfile 中做到这一点,我应该添加一行RUN crontab -u www-data /some_where/crontab.conf

但我发现如果我这样做,它也可以工作(docker 图像基于 alpine3.7)。

ADD /some_where/crontab /etc/crontabs/www-data
RUN chmod 0644 /etc/crontabs/www-data

但我找不到解释它为什么起作用的文档。那么为什么它会起作用,这是否意味着如果我将另一个名为 www 的文件添加到 /etc/crontabs 它将为 www 创建一个 cronjob(假设我有 www 用户)?

标签: dockercronalpine

解决方案


看到这个

多用户 cron

由于 Unix 是一个多用户操作系统,一些应用程序必须能够支持多个用户,cron 就是其中之一。每个用户都可以拥有自己的 crontab 文件,该文件可以通过命令 crontab 创建/编辑/删除。此命令会创建一个单独的 crontab 文件,尽管这是一个文本文件,就像 /etc/crontab 一样,但不应直接对其进行编辑。crontab 文件通常存储在/var/spool/cron/crontabs/<user>(Unix/Slackware/ BSD)、 /var/spool/cron/<user>(RedHat) 或/var/cron/tabs/<user>(SuSE) 中,但可能会保存在其他地方,具体取决于您正在运行的 Un x 风格。

而在alpine中,它也在/var/spool/cron/crontabs,只是/var/spool/cron/crontabs一个符号链接/etc/crontabs,所以你也可以把它放在/etc/crontabs

/etc/crontabs # ls -alh  /var/spool/cron/crontabs
lrwxrwxrwx    1 root     root          13 Jun 19 17:14 /var/spool/cron/crontabs -> /etc/crontabs

推荐阅读