Docker CentOS 7 - cron 在本地机器上不工作
Docker CentOS 7 - cron not working in local machine
在我的 VPS 中,我创建了一个包含 cron 运行ning 作为入口命令的 docker 映像。我还有一个示例 cron 文件,说明它应该每 5 分钟执行一次命令。
Docker文件:
FROM centos:centos7
MAINTAINER Lysender <foo@example.com>
# Install packages
RUN yum -y update && yum clean all
RUN yum -y install epel-release && yum clean all
RUN yum -y install git \
bind-utils \
pwgen \
psmisc \
net-tools \
hostname \
curl \
curl-devel \
sqlite \
cronie \
libevent \
gearmand \
libgearman \
libgearman-devel \
php \
php-bcmath \
php-common \
php-pear \
php-mysql \
php-cli \
php-devel \
php-gd \
php-fpm \
php-pdo \
php-mbstring \
php-mcrypt \
php-soap \
php-xml \
php-xmlrpc \
php-pecl-gearman && yum clean all
# Configure servicies
ADD ./start.sh /start.sh
ADD ./my-cron.conf /etc/cron.d/my-cron
RUN chmod 755 /start.sh
CMD ["/bin/bash", "/start.sh"]
我的-cron.conf 文件:
# Run command every 5 minutes
*/5 * * * * root echo "foo" >> /tmp/logit.log 2>&1
start.sh
#!/bin/bash
__run_cron() {
echo "Running the run_cron function."
crond -n
}
# Call all functions
__run_cron
然后我这样构建它:
docker build --rm -t lysender/cron-php-gearman .
然后运行:
docker run --name cron -d lysender/cron-php-gearman
5 分钟后,我检查了 cron 是否工作:
docker exec -it cron bash
cat /tmp/logit.log
有效。所以我把它推到 docker 中心到我的帐户。
docker push lysender/cron-php-gearman
然后拉入我的本地机器,运行 它就像我在 VPS 主机上所做的那样。
但是,没有迹象表明 cron 实际上 运行s,例如:/tmp/logit.log
文件从未创建。
哪里出了问题?
机器规格:
- VPS: Linode 运行在 KVM 上安装 Slackware 14.1,Docker 1.6.2
- 本地:VirtualBox VM 运行ning Slackware 14.1,Docker 1.6.2 - 与 VPS
相同
两者都是 运行 普通用户(非 root)。
不过,区别在于 CentOS 镜像。
- VPS:5 周龄
- 本地:4个月大。
我已经提取了一个新的 CentOS7 映像,这样两个映像都已经存在 5 周了,但我没有先删除映像(只是 updated/pulled)。
所以我拉CentOS 7,然后拉lysender/cron-php-gearman。我的理解是它应该 运行ning 在较新的 CentOS 7 映像之上。
我已经决定不使用 stock cron 守护进程,并基于此 Dockerfile 切换到基于 python 的 devcron
。
https://registry.hub.docker.com/u/hamiltont/docker-cron/dockerfile/
这是我的新 Dockerfile。
https://github.com/lysender/docker-cron-php-gearman/blob/master/Dockerfile
Devcron:https://bitbucket.org/dbenamy/devcron
原因是,在清除整个本地 docker 安装并安装新的 docker 图像后,库存 cron 在我的本地设置中仍然无法正常工作。
这将是我暂时的临时解决方案。
感谢您的帮助。
似乎是 Centos 上的容器特定问题:
https://github.com/CentOS/CentOS-Dockerfiles/issues/31
RUN sed -i '/session required pam_loginuid.so/d' /etc/pamd.d/crond
在我的 VPS 中,我创建了一个包含 cron 运行ning 作为入口命令的 docker 映像。我还有一个示例 cron 文件,说明它应该每 5 分钟执行一次命令。
Docker文件:
FROM centos:centos7
MAINTAINER Lysender <foo@example.com>
# Install packages
RUN yum -y update && yum clean all
RUN yum -y install epel-release && yum clean all
RUN yum -y install git \
bind-utils \
pwgen \
psmisc \
net-tools \
hostname \
curl \
curl-devel \
sqlite \
cronie \
libevent \
gearmand \
libgearman \
libgearman-devel \
php \
php-bcmath \
php-common \
php-pear \
php-mysql \
php-cli \
php-devel \
php-gd \
php-fpm \
php-pdo \
php-mbstring \
php-mcrypt \
php-soap \
php-xml \
php-xmlrpc \
php-pecl-gearman && yum clean all
# Configure servicies
ADD ./start.sh /start.sh
ADD ./my-cron.conf /etc/cron.d/my-cron
RUN chmod 755 /start.sh
CMD ["/bin/bash", "/start.sh"]
我的-cron.conf 文件:
# Run command every 5 minutes
*/5 * * * * root echo "foo" >> /tmp/logit.log 2>&1
start.sh
#!/bin/bash
__run_cron() {
echo "Running the run_cron function."
crond -n
}
# Call all functions
__run_cron
然后我这样构建它:
docker build --rm -t lysender/cron-php-gearman .
然后运行:
docker run --name cron -d lysender/cron-php-gearman
5 分钟后,我检查了 cron 是否工作:
docker exec -it cron bash
cat /tmp/logit.log
有效。所以我把它推到 docker 中心到我的帐户。
docker push lysender/cron-php-gearman
然后拉入我的本地机器,运行 它就像我在 VPS 主机上所做的那样。
但是,没有迹象表明 cron 实际上 运行s,例如:/tmp/logit.log
文件从未创建。
哪里出了问题?
机器规格:
- VPS: Linode 运行在 KVM 上安装 Slackware 14.1,Docker 1.6.2
- 本地:VirtualBox VM 运行ning Slackware 14.1,Docker 1.6.2 - 与 VPS 相同
两者都是 运行 普通用户(非 root)。
不过,区别在于 CentOS 镜像。
- VPS:5 周龄
- 本地:4个月大。
我已经提取了一个新的 CentOS7 映像,这样两个映像都已经存在 5 周了,但我没有先删除映像(只是 updated/pulled)。
所以我拉CentOS 7,然后拉lysender/cron-php-gearman。我的理解是它应该 运行ning 在较新的 CentOS 7 映像之上。
我已经决定不使用 stock cron 守护进程,并基于此 Dockerfile 切换到基于 python 的 devcron
。
https://registry.hub.docker.com/u/hamiltont/docker-cron/dockerfile/
这是我的新 Dockerfile。
https://github.com/lysender/docker-cron-php-gearman/blob/master/Dockerfile
Devcron:https://bitbucket.org/dbenamy/devcron
原因是,在清除整个本地 docker 安装并安装新的 docker 图像后,库存 cron 在我的本地设置中仍然无法正常工作。
这将是我暂时的临时解决方案。
感谢您的帮助。
似乎是 Centos 上的容器特定问题:
https://github.com/CentOS/CentOS-Dockerfiles/issues/31
RUN sed -i '/session required pam_loginuid.so/d' /etc/pamd.d/crond