docker中的cron不是';当执行crontab-l时,cron job会显示
我正在尝试一个cron作业,它每分钟都会调用我的flask应用程序的端点。构建并运行映像后,如果运行docker中的cron不是';当执行crontab-l时,cron job会显示,docker,flask,cron,Docker,Flask,Cron,我正在尝试一个cron作业,它每分钟都会调用我的flask应用程序的端点。构建并运行映像后,如果运行crontab-l,我可以看到作业,但我的flask没有报告任何调用。知道为什么吗?感谢您的帮助!这是设置 Dockerfile: FROM python:3 WORKDIR /app COPY . /app RUN apt-get update && apt-get install -y cron curl RUN pip install --trusted-host pypi.
crontab-l
,我可以看到作业,但我的flask没有报告任何调用。知道为什么吗?感谢您的帮助!这是设置
Dockerfile:
FROM python:3
WORKDIR /app
COPY . /app
RUN apt-get update && apt-get install -y cron curl
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 13800
RUN chmod -v +x start.sh
CMD ["./start.sh"]
下面是start.sh中的内容:
#!/bin/sh
/usr/bin/crontab periodicGossipInvoker
# start cron
service cron start
# Flask
python main.py
以下是periodicGossipInvoker中的内容:
* * * * * sleep 10; /usr/bin/curl http://0.0.0.0:13800/dict
以下是跑步路线:
$ docker run --name="node1" --net=kv_subnet \
> --ip=10.10.0.2 -p 13802:13800 \
> -e ADDRESS="${addr1}" \
> -e VIEW=${initial_full_view} \
> -e REPL_FACTOR=2 \
> kv-store:4.0
Starting periodic command scheduler: cron.
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:13800/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 104-728-720
问题是,flask应用程序从未收到来自cron作业的任何调用,即使我看到了cron作业
docker exec -ti 556 crontab -l
* * * * * sleep 10; /usr/bin/curl http://0.0.0.0:13800/dict
我不熟悉docker或flask;但是你不应该做一些类似于:
/usr/bin/curl的事情吗http://0.0.0.0:13800/dict >/my/home/dir/output file
@Roadowl是的,如果没有办法用flask监视传入的请求,我会这样做,但是因为flask在收到请求时显示类似于127.0.0.1-[27/Nov/2019 20:08:11]“GET/dict HTTP/1.1”200-
(我通过执行dockerexec-ti556/usr/bin/curl对其进行了测试http://0.0.0.0:13800/dict
)我跳过了这一步。不过感谢你的帮助!这个怎么样:sleep 10&&/usr/bin/curlhttp://0.0.0.0:13800/dict
0.0.0.0
在curl命令中不是有效的IP地址。请求应为/usr/bin/curlhttp://127.0.0.1/dict
如果应用程序与cron守护程序在同一容器中运行。但是is违反了每个容器1个进程的规则。实际上,cron部分应该在一个容器中运行,而flask应用程序应该在另一个容器中运行。@Roadowl刚刚尝试过它,也尝试过只进行睡眠,但都没有成功