我是 cronjobs 的初学者。我花了一些时间阅读 StackOverflow 上的各种帖子,这就是我想出下面的解决方案的方法。它仍然无法按照我想要的方式工作,也许有人可以提供帮助?
这是我的 Docker 文件:
FROM conda/miniconda3
WORKDIR /app
RUN apt-get update -y
RUN apt-get install cron -y
RUN apt-get install curl -y
RUN conda update -n base -c defaults conda
RUN conda install mamba -n base -c conda-forge
COPY ./environment.yml ./environment.yml
RUN mamba env create -f environment.yml
# Make RUN commands use the new environment:
SHELL ["conda", "run", "--no-capture-output", "-n", "d2", "/bin/bash", "-c"]
#Setup cron
COPY ./cronjob /etc/cron.d/cronjob
RUN crontab /etc/cron.d/cronjob
RUN chmod 0600 /etc/cron.d/cronjob
RUN touch ./cron.log
COPY ./ ./
RUN ["chmod", "+x", "run.sh"]
ENTRYPOINT ["sh", "run.sh"]
CMD ["cron", "-f"]
我想做的是:
run.sh
(我已经设法让它工作)cronjob
的文件中定义(请参阅下面的内容)cronjob 不起作用,为什么? 请注意,cron.log 为空。它永远不会被触发。
crontab -l
(在容器内部运行)的输出是:
$ crontab -l
# Updates every 15 minutes.
*/15 * * * * /bin/sh /app/cron.sh >> /app/cron.log 2&>1
定时作业
# Updates every 15 minutes.
*/15 * * * * /bin/sh /app/cron.sh >> /app/cron.log 2&>1
我也遇到了类似的问题,无法读取 crontab
我也使用过类似的东西:
COPY ./cronjob /etc/cron.d/cronjob
本地
cronjob
文件的权限为 664 而不是 644。这导致 cron 记录Sep 29 16:21:01 0f2c2e0ddbfd cron[389]: (*system*crontab) INSECURE MODE (group/other writable) (/etc/cron.d/crontab)
(我实际上必须安装 syslog-ng 才能看到这种情况发生)。
事实证明,如果其他人可写,cron 将拒绝读取 cron 配置。我想事后看来这是有道理的,但我完全没有注意到这一点。
将我的 cronjob 文件权限更改为 644 为我解决了这个问题(我在本地文件系统上执行了此操作,Dockerfile 复制了权限)
只有你需要root才能解决问题
*/15 * * * * root /bin/sh /app/cron.sh >> /app/cron.log 2&>1
正如 Saeed 已经指出的那样,有理由相信您没有将 cron.sh 脚本放入容器中。
最重要的是,对 cron 进行编程,使其不会在任何地方记录失败的调用。您可以尝试打开一些调试日志记录(几年前我几乎不得不搜索 cron 的源代码才能找到正确的设置)。最后 cron 会将其调试输出发送到 syslog - 但在您的容器中只有 cron 正在运行,因此日志条目可能会再次在该阶段丢失。
这最终意味着你处于黑暗之中,需要找到针。但安装脚本是第一次良好的尝试。
我的问题是当我在容器中运行 crontab 时,我没有指定将运行 crontab 脚本的用户。
echo "* * * * * /usr/local/bin/cron_job.sh >> /var/log/cron.log 2>&1" > /etc/cron.d/fetch_crl_cron
而不是
echo "* * * * * root /usr/local/bin/cron_job.sh >> /var/log/cron.log 2>&1" > /etc/cron.d/fetch_crl_cron
为此必须下载 syslog-ng。
Oct 9 06:46:08 rabbitmq cron[25178]: Error: bad username; while reading /etc/cron.d/cron_job