Cron python 作业和 Docker 日志
Cron python job and Docker logs
我有一个 Python 脚本 运行 在 docker 容器中作为 cron 作业,例如我想在 docker 日志中查看标准输出我的脚本中有以下行
print("BT: " + bt)
我想在 运行 docker logs some-container
时看到这个输出
我的 cron 作业如下
* * * * * root /usr/local/bin/python /opt/platform-location/platform-location.py >> /var/log/cron.log 2>&1
我是 运行 来自 Docker 文件的 cron
如下:
FROM python:3
WORKDIR /opt/platform-location
COPY requirements.txt requirements.txt
COPY URLs.txt URLs.txt
COPY platform-location.py platform-location.py
COPY platform-location.cron /etc/cron.d/platform-location
RUN pip install -r requirements.txt
RUN chmod 0644 /etc/cron.d/platform-location
RUN touch /var/log/cron.log
RUN apt-get update && apt-get upgrade -y && apt-get -y install cron vim
CMD cron && tail -f /var/log/cron.log
你能帮帮我吗?
PS:它不是 Python 登录 Docker 的副本,因为我想在 运行 docker 登录命令时查看输出不是 docker 执行命令。
我也在使用其他问题记者不使用的 cron。
问题不在于 python 脚本,您是否在没有 python 的情况下验证 CMD cron && tail -f /var/log/cron.log
的 cron 日志?
使用下图,我确信上面的代码片段可以正常工作,但 cron 无法将日志写入控制台,因此 python 也不会写入。
这是工作示例。
FROM python:3.7-alpine3.9
COPY test.py /test.py
RUN cat /test.py
RUN echo "* * * * * echo hello" | crontab -
RUN echo "* * * * * python /test.py" | crontab -
CMD ["crond","-f"]
test.py
my_string = "Hello, World!"
print(my_string)
图像包含 Python 版本 3.7.4
。您可以将基础图像更改为任何 python version 如果基于 alpine 则可以正常工作。
更新:
仔细检查指定位置上的 python 文件是否存在,因为这是您可以尝试的工作示例。
FROM python:3.6
RUN apt-get update && apt-get -y install cron vim
WORKDIR /opt/platform-location
RUN echo "* * * * * root /usr/local/bin/python /opt/platform-location/platform-location.py >> /var/log/cron.log 2>&1" >> /etc/cron.d/platform-location
RUN echo 'print ("hello World! ")' >> /opt/platform-location/platform-location.py
RUN chmod 0644 /etc/cron.d/platform-location
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log
我有一个 Python 脚本 运行 在 docker 容器中作为 cron 作业,例如我想在 docker 日志中查看标准输出我的脚本中有以下行
print("BT: " + bt)
我想在 运行 docker logs some-container
时看到这个输出
我的 cron 作业如下
* * * * * root /usr/local/bin/python /opt/platform-location/platform-location.py >> /var/log/cron.log 2>&1
我是 运行 来自 Docker 文件的 cron
如下:
FROM python:3
WORKDIR /opt/platform-location
COPY requirements.txt requirements.txt
COPY URLs.txt URLs.txt
COPY platform-location.py platform-location.py
COPY platform-location.cron /etc/cron.d/platform-location
RUN pip install -r requirements.txt
RUN chmod 0644 /etc/cron.d/platform-location
RUN touch /var/log/cron.log
RUN apt-get update && apt-get upgrade -y && apt-get -y install cron vim
CMD cron && tail -f /var/log/cron.log
你能帮帮我吗?
PS:它不是 Python 登录 Docker 的副本,因为我想在 运行 docker 登录命令时查看输出不是 docker 执行命令。 我也在使用其他问题记者不使用的 cron。
问题不在于 python 脚本,您是否在没有 python 的情况下验证 CMD cron && tail -f /var/log/cron.log
的 cron 日志?
使用下图,我确信上面的代码片段可以正常工作,但 cron 无法将日志写入控制台,因此 python 也不会写入。
这是工作示例。
FROM python:3.7-alpine3.9
COPY test.py /test.py
RUN cat /test.py
RUN echo "* * * * * echo hello" | crontab -
RUN echo "* * * * * python /test.py" | crontab -
CMD ["crond","-f"]
test.py
my_string = "Hello, World!"
print(my_string)
图像包含 Python 版本 3.7.4
。您可以将基础图像更改为任何 python version 如果基于 alpine 则可以正常工作。
更新: 仔细检查指定位置上的 python 文件是否存在,因为这是您可以尝试的工作示例。
FROM python:3.6
RUN apt-get update && apt-get -y install cron vim
WORKDIR /opt/platform-location
RUN echo "* * * * * root /usr/local/bin/python /opt/platform-location/platform-location.py >> /var/log/cron.log 2>&1" >> /etc/cron.d/platform-location
RUN echo 'print ("hello World! ")' >> /opt/platform-location/platform-location.py
RUN chmod 0644 /etc/cron.d/platform-location
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log