当我启动我的docker集装箱时,Cron没有运行
为了序言,我一直在引用这两篇文章来寻求帮助:
- 用Docker运行cron作业 – Julien Boulay
- 在Docker容器中运行cron作业 – Chris S.
我的目标是在启动Docker容器时自动启动cron作业。 目前,它不会自动启动,但我可以手动进入我的容器,并运行service cron start
,启动作业,它可以正常工作。
所以问题是: 当我的容器启动时,如何让我的cron作业自动启动?
Dockerfile
FROM microsoft/dotnet:latest RUN apt-get update && apt-get install -y cron COPY . /app WORKDIR /app ADD crontab /etc/cron.d/crontab RUN chmod 0600 /etc/cron.d/crontab RUN crontab -u root /etc/cron.d/crontab RUN touch /var/log/cron.log RUN ["dotnet", "restore"] RUN ["dotnet", "build"] EXPOSE 5000/tcp CMD cron && tail -f /var/log/cron.log CMD service cron start
crontab中
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1 # Empty space
我正在做的是直接像这样的CMD调用cron:
CMD /usr/sbin/cron -f
在此之前,我将crontab添加到容器,并使用以下命令将其作为根crontab进行分配:
RUN crontab /root/mycrontab
您不需要对位于/etc/cron.d
文件调用crontab命令,但需要这些文件才能具有正确的语法。 用你的例子,而不是这个:
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
你应该有这个:
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
在你的crontab文件上。 这只适用于位于/etc/cron.d
的crontab文件,否则你的crontab文件语法是正确的,你使用crontab
命令加载它。
从你的例子开始,我认为你应该像这样修改你的文件:
Dockerfile
FROM microsoft/dotnet:latest RUN apt-get update && apt-get install -y cron COPY . /app WORKDIR /app ADD crontab /etc/cron.d/crontab RUN chmod 0600 /etc/cron.d/crontab RUN touch /var/log/cron.log RUN ["dotnet", "restore"] RUN ["dotnet", "build"] EXPOSE 5000/tcp CMD /usr/sbin/cron -f
crontab中
* * * * * root echo "Hello world" >> /var/log/cron.log 2>&1
另一种select是:
Dockerfile
FROM microsoft/dotnet:latest RUN apt-get update && apt-get install -y cron COPY . /app WORKDIR /app ADD crontab /root/ RUN crontab /root/crontab RUN touch /var/log/cron.log RUN ["dotnet", "restore"] RUN ["dotnet", "build"] EXPOSE 5000/tcp CMD /usr/sbin/cron -f
crontab中
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
虽然我无法在特定的容器中获得cron的工作,但是我能够专门为cron创build一个独立的docker容器,并成功地让它自动运行。
就cron容器的设置而言,我遵循链接的文章, 使用Docker运行一个cron作业 – Julien Boulay ,并能够正常工作。
在基于Debian的发行版中存在一个错误,这将导致cronjobs失败,因为docker使用分层文件系统,并且cron不会启动,并且表示NUMBER OF HARD LINKS > 1 (/etc/crontab)
。
修复很简单,把touch /etc/crontab /etc/cron.*/*
到容器的入口点。
我做了一篇博客文章,解释如何在Docker容器中设置cron: https : //digitz.org/blog/cron-jobs-in-docker/
- 在Linux上使用Docker进行Asp.Net 5.0开发
- MongoDb泊坞窗在一些请求后挂起
- DotNet构buildCLI在terminal中工作,但不在Docker构build中
- Docker没有托pipe它所说的端口上的任何东西,这是怎么回事?
- ASP.NET 5和Docker错误:/ bin / sh:[dnx,:找不到命令
- Windows卷上的Visual Studio 2017 Docker项目问题
- 未findASP.NET Core 1.0 EF7 System.Data.SqlClient
- Mac OS X Docker基线aspnet错误:未findlibdl
- AWS Codebuild .NET Core构buildDocker镜像