【发布时间】:2020-07-07 13:13:15
【问题描述】:
由于一些安全问题,我使用tinycron 而不是 cron。
我用一个简单的 python 文件进行了测试。
python.py:
import time
print(time.ctime())
Dockerfile:
FROM MyBaseImage:Centos7
USER root
RUN yum -y update \
&& yum -y install python3 vim \
&& yum clean all \
&& rm -rf /var/cache/yum
RUN pip3 install requests
RUN localedef -c -i en_US -f UTF-8 en_US.UTF-8 && \
localedef -c -i en_US -f UTF-8 en_US && \
localedef -c -i ko_KR -f UTF-8 ko_KR.UTF-8 && \
localedef -c -i ko_KR -f UTF-8 ko_KR
RUN echo "LANG=en_US.utf8" > /etc/locale.conf
# install tinycron
RUN curl -sLo tinycron https://github.com/bcicen/tinycron/releases/download/v0.3/tinycron-0.3-linux-amd64 \
&& chmod +x tinycron \
&& mv tinycron /usr/local/bin/
WORKDIR /app
COPY . /app
CMD /usr/local/bin/tinycron '*/5 * * * * * *' python3 /app/test.py
这应该每五秒打印一次。
但是,它有时会打印两次。
✗ docker run --rm -it --name=test tiny2
Tue Jul 7 12:02:15 2020
Tue Jul 7 12:02:20 2020
Tue Jul 7 12:02:25 2020
Tue Jul 7 12:02:30 2020
Tue Jul 7 12:02:34 2020 ###
Tue Jul 7 12:02:35 2020 ###
Tue Jul 7 12:02:40 2020
Tue Jul 7 12:02:45 2020
Tue Jul 7 12:02:50 2020
Tue Jul 7 12:02:55 2020
Tue Jul 7 12:03:00 2020
Tue Jul 7 12:03:04 2020 ###
Tue Jul 7 12:03:05 2020 ###
我检查了容器,并确认只有一个 cron 进程。
➜ ~ docker exec -it test /bin/bash
[root@ce614b03b559 app]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 12:02 pts/0 00:00:00 /usr/local/bin/tinycron */5 * * * * * * python3 /app/test.py
root 14 0 0 12:02 pts/1 00:00:00 /bin/bash
root 30 14 0 12:02 pts/1 00:00:00 ps -ef
这是什么原因造成的??
我的真实代码必须每分钟运行一次 python 代码(发送电子邮件),而且它也会执行两次。
任何想法表示赞赏:)
【问题讨论】:
-
见here
-
@zr0gravity7 是的,我已经检查了帖子,但没有帮助。只有一个用户,只有一个进程,没有符号链接或自调用。问题是它不是每次都执行两次。