gpt4 book ai didi

docker - 同一容器中的 Cron 在本地工作,但在集群中失败

转载 作者:行者123 更新时间:2023-12-02 11:58:51 25 4
gpt4 key购买 nike

我有一个带有 cron 计划的 super 简单容器:

* * * * * root /bin/bash /alive.sh

活着的.sh:
#!/bin/bash

/bin/echo "I'm alive"
/bin/echo $(/bin/date) >> /tmp/alive.log

我在本地构建 docker 镜像并运行它:
docker build -t orian/crondemo:v0 .
docker run --rm -it --name crondemo orian/crondemo:v0

大约一分钟后,我可以检查是否正在创建一个新文件:
docker exec crondemo ls /tmp

I 标记并将图像推送到 Google Container Registry:
TAG=eu.gcr.io/<PROJECT_ID>/crondemo:v0
docker tag orian/crondemo:v0 $TAG
kubectl docker -- push $TAG

手动启动一个 pod:
kubectl run crondemo --image=$TAG --replicas=1 --restart=Never

并验证它是否有效:
kubectl exec crondemo ls /tmp

这里有个问题, /tmp/alive.log文件没有被写入。哪里有问题?

我准备了一个带有样本的仓库: https://github.com/orian/k8s-cron-demo

注意
  • 我还测试了覆盖 /var/spool/cron/crontabs/root但它并没有解决问题。
  • 我正在使用 docker 图像:openjdk:8-jre .在切换之前,我使用了 alpinecrond .那时它似乎起作用了。

  • Edit2 - 找到(这太疯狂了):
  • https://forums.docker.com/t/running-cronjob-in-debian-jessie-container/17527/2
  • Issues running cron in Docker on different hosts
  • Why is it needed to set `pam_loginuid` to its `optional` value with docker?
  • 最佳答案

    我关注了 https://stackoverflow.com/a/21928878/436754关于启用日志。

    正在运行:/var/log/syslog

    May  4 12:33:05 crondemo rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="14" x-info="http://www.rsyslog.com"] start
    May 4 12:33:05 crondemo rsyslogd: imklog: cannot open kernel log(/proc/kmsg): Operation not permitted.
    May 4 12:33:05 crondemo rsyslogd-2145: activation of module imklog failed [try http://www.rsyslog.com/e/2145 ]
    May 4 12:33:08 crondemo cron[38]: (CRON) INFO (pidfile fd = 3)
    May 4 12:33:08 crondemo cron[39]: (CRON) STARTUP (fork ok)
    May 4 12:33:08 crondemo cron[39]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab)
    May 4 12:33:08 crondemo cron[39]: (*system*crondemo) NUMBER OF HARD LINKS > 1 (/etc/cron.d/crondemo)
    May 4 12:33:08 crondemo cron[39]: (CRON) INFO (Running @reboot jobs)
    May 4 12:34:01 crondemo cron[39]: (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab)
    May 4 12:34:01 crondemo cron[39]: (*system*crondemo) NUMBER OF HARD LINKS > 1 (/etc/cron.d/crondemo)

    这让我在 Google 上搜索 cron "NUMBER OF HARD LINKS > 1"我发现: https://github.com/phusion/baseimage-docker/issues/198

    解决方法是修改 Dockerfile在启动时覆盖 cron 文件,而不是由 Docker 挂载。
  • Dockerfile COPY cronfile /cronfile
  • docker-entrypoint.sh : cp /cronfile /etc/cron.d/crondemo

  • 带有解决方法的分支: https://github.com/orian/k8s-cron-demo/tree/with-rsyslog

    关于docker - 同一容器中的 Cron 在本地工作,但在集群中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740546/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com