【问题标题】:`/bin/sh: 1: python: not found` when run via cron in docker`/bin/sh: 1: python: not found` 在 docker 中通过 cron 运行时
【发布时间】:2020-08-14 05:49:41
【问题描述】:

我想在docker容器中通过cron重复调用脚本,但是当我从一次执行切换到通过cron执行时,官方python图像突然似乎找不到python。

Dockerfile:

FROM python:3.7-slim

COPY main.py /home/main.py

#A: works
CMD [ "python", "/home/main.py" ]

#B: doesn't work
#RUN  apt-get update && apt-get -y install -qq --force-yes cron
#COPY hello-cron /etc/cron.d/hello-cron
#CMD ["cron", "-f"]

main.py

import time

for i in range(90000):
    print(i)
    time.sleep(5000)

你好-cron:

* * * * * root python /home/main.py > /proc/1/fd/1 2> /proc/1/fd/2
#

当我在 Dockerfile 中将 A 切换为 B 时,错误消息是:/bin/sh: 1: python: not found

感谢大家的快速回复!在 cron 文件中添加 PATH=/usr/local/bin 解决了我的问题。

【问题讨论】:

标签: python docker cron


【解决方案1】:

Cron 没有像普通登录 shell 一样设置 PATH 环境变量,因此无法找到 python。如果您指定 Python 可执行文件的完整路径,它应该可以工作,例如将 python 替换为 /usr/bin/python (或者你的 Python 可执行文件的路径恰好是)。或者,您可以在 Cron 配置文件中显式设置 PATH 环境变量以包含可以找到 Python 的目录。

【讨论】:

  • 有趣的是完整路径 PATH=/usr/local/bin/python 对我不起作用,只有目录 PATH=/usr/local/bin 的路径起作用。
  • 哦,不,我的意思是使用绝对路径来指定 python 可执行文件。当然,更改 PATH 环境变量也可以,尽管您需要指定目录。我会改写我的答案。
猜你喜欢
  • 2015-12-18
  • 2021-10-20
  • 2019-09-11
  • 2015-11-28
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
相关资源
最近更新 更多