【发布时间】:2021-09-05 22:57:24
【问题描述】:
我正在尝试在 Windows 的 Docker Desktop 中的 selenium 容器中运行 cron 作业。因为我觉得我遇到了几个问题,所以我很难弄清楚哪些细节很重要,所以我会尽量做到彻底。
环境:
- Docker Desktop for Windows(为了避免行尾问题,我在 Dockerfile 中创建了 cron 字符串)
- Selenium-Chrome(需要注意的一点是,这里大多数东西都是在 seluser 下而不是 root 下运行的。我这么说是因为其他一些解决方案因此不起作用)
问题:
我无法在我的 cron 作业中运行 python
我检查过的相关堆栈溢出链接:
有很多,但this是主要的。
例如,这个 sn-p 记录到适当显示的日志文件:
FROM selenium/standalone-chrome
COPY . /home/seluser/
# # install selenium
RUN echo "**** install packages ****" && \
sudo apt-get update && \
sudo apt-get install -y cron && \
echo "**** cleanup ****" && \
sudo apt-get clean && \
sudo rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# Create the log file to be able to run tail
RUN touch /home/seluser/cron.log
# Setup cron job
RUN echo "* * * * * echo "Hello, World!" >> /home/seluser/cron.log" | sudo crontab
# Run the command on container startup
CMD sudo cron && tail -f /home/seluser/cron.log
但这不是:
FROM selenium/standalone-chrome
COPY . /home/seluser/
# # install selenium
RUN echo "**** install packages ****" && \
sudo apt-get update && \
sudo apt-get install -y cron && \
echo "**** cleanup ****" && \
sudo apt-get clean && \
sudo rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# Create the log file to be able to run tail
RUN touch /home/seluser/cron.log
# Setup cron job
RUN echo "* * * * * /usr/bin/python3 -c print("Hello world") >> /home/seluser/cron.log" | sudo crontab
# Run the command on container startup
CMD sudo cron && tail -f /home/seluser/cron.log
【问题讨论】:
-
print(之后和Hello之前的双引号匹配echo行开头的双引号,所以它会丢失;您没有完整有效的单 shell 字 Python 脚本。最好COPY一个独立的可运行脚本并运行它,而不是尝试使引用工作。 (你也根本不需要sudo;你可以在需要的地方切换到USER root。) -
对于您的第一部分,为什么 echo 脚本会起作用?它有同样的双引号问题。至于 COPY 解决方案,即使仅使用 echo 语句,我也无法找到使其工作的方法。链接的解决方案在 Windows 上不起作用。
-
引用恰好与
echo配合使用;它并不关心它有多少参数。在echo的情况下,您可能会查看实际创建的 crontab;我不希望它有任何"..."。 -
@DavidMaze 一年后我知道了...但是如果您愿意,您可以从您的 cmets 中创建一个答案,我会将其标记为已接受,因为它帮助我找出了我的问题。
标签: docker cron docker-desktop