Cron 作业未在 Kubernetes + Alpine Linux 上运行

Cron 作业未在 Kubernetes + Alpine Linux 上运行

我正在尝试在 Alpine Linux docker 镜像上运行一个 cron 作业,然后将其推送到 Kubernetes 容器中。Cron 作业是我希望容器每 15 分钟重新启动一次。所以我的命令是pkill processname

关于 Alpine Cron 作业的一点信息:对于 Alpine Linux,cron 是定期执行的,也就是说它已经创建了文件夹 /15min. /hourly. /daily. /weekly. /monthly。所以我只需将我的脚本复制到其中一个文件夹中即可运行它。

我创建了脚本,并按照 Alpine FAQ 页面上的要求,我没有给文件提供任何扩展名,而是将其复制到文件夹中并赋予其执行权限。当我尝试运行命令时,run-parts --test /etc/periodic/15min它显示有一个需要执行的脚本。尽管该脚本从未执行过。当我尝试在本地计算机上运行该 docker 映像时,不是使用该脚本,而是使用另一个脚本,我只是在文件夹中创建一个文件,它运行良好。

我也尝试过crond -f -l 8在 Kube 集群上运行,但仍然不起作用。

我将非常感激对这部分的帮助,我遗漏了什么或者哪里出了问题。

答案1

欢迎来到超级用户。

首先,也许你面对的方式不对。如果目标是每 15 分钟重启一次整个容器,也许你应该查看下面的链接。

关于重新启动 Pod 的问题,有多种可能的解决方案

Pod 生命周期文档

Kubernetes 概念- 解释 kubernetes 的工作原理以及人们在那里使用的名称。

只是为了完整性,如果你真的想运行一个定期任务,查看具体的 Kubernetes 文档,他们说明了如何创建 cronjobs 并调试它们。我还建议阅读文档中有关 Kubernetes 限制的内容,因为可能存在某些东西会主动阻止运行你的 cronjobs

有关 cronjobs 的 GCP 文档

有关 Cronjobs 的 Kubernetes 文档

我正在给你一份关于如何创建 cronjob 任务的简历,但是如果你不熟悉 Kubernetes,你应该仔细阅读上面的内容,并点击里面的链接,他们有准备好的环境供你使用并学习 Kubernetes 的基础知识。

里面有更详细的说明,但它基本上为您提供了一个示例命令和部署方法。我将其修改为每 15 分钟一次并运行 pkill。您必须创建一个包含以下内容的 yaml 文件(检查语法以了解更复杂的 cron 行为):

# cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/15 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - pkill yourprocess
          restartPolicy: OnFailure

然后使用部署它

kubectl apply -f [FILENAME]

使用以下命令检查你的 cronjob 是否已部署:

kubectl describe cronjob [CRON_JOB]

发布更多截图和示例来描述上述过程

此后,这是一个非常通用的答案。您可以发表评论,我会尽力帮助您,但我目前无法访问 Alpine Linux 安装,因此可能无法提供帮助。这是解决您问题的 Alpine Linux 文档页面

追踪错误:简单的方法

有一种非常简单的方法可以缩小发送范围,尽管它不是很精确。这里有两种可能:CRON 本身有问题,或者你的脚本有问题(例如权限)。这个过程很简单:

  • 创建一个任务,在一个文件夹内创建一个空文件,您绝对确定每个人都可以读取和写入。
  • 如果在任务应该运行时出现新文件,则说明您的 cron 正在正确执行,并且您的脚本存在问题。转到“脚本问题”部分。如果没有,则说明您的 cron 存在问题。转到 Cron 问题部分

跟踪错误:日志

解决任何系统中的问题的最佳方法是查看日志。除非另有配置,否则 cron 等软件通常会将日志存储在 syslog 上(通常位于 /var/log/syslog)。这个帖子谈论 cron 日志文件夹。

如果您发现 cron 实例的日志记录位置没有任何内容,则意味着您的 cron 服务根本没有运行。Cron 问题中有一个针对此问题的 Alpine Linux 特定解决方案。如果您看到错误,则应查看它们并尝试缩小问题范围。如果没有,则应确保您的脚本实际上没有运行。

Cron 问题

好的,现在你知道 cron 无法正常工作。有多种可能的情况:

  • Cron 根本没有运行

可能是 cron 服务没有启动。检查服务是否正在运行。如果没有,请尝试手动启动它。检查它是否已正确启动,然后将其添加到启动进程。执行此操作的方法因操作系统而异。在 Alpine Linux 中,这应该可以解决问题:

rc-service crond start && rc-update add crond
  • 您正在使用的 cron 文件夹未被 cron 使用

您应该检查主 cron 配置文件以验证放置脚本的文件夹是否确实被添加。

  • 错别字

也许配置行在参数或类似内容的空格方面存在一些错误,尽管在这种情况下似乎不是这种情况,因为您在文件夹中使用了测试命令。

脚本问题

如果您的脚本运行但没有产生所需的输出,那么最好执行以下步骤:

  • 将脚本分成一个文件。赋予它运行权限,并确保第一行正确说明要使用的 shell,在 Alpine 的情况下,此行应为 #!/bin/sh
  • 将标准和错误输出重定向到文件分析发生了什么。

一般建议

  • 如脚本问题部分所述,将单行代码分离到脚本文件中并将其输出指向文件是一种很好的做法,以便能够调试各种问题。
  • 仔细查看目录和文件权限(脚本直接访问的权限以及 cron 应该读取/用户为了执行脚本的权限),这是导致失败的常见原因,特别是在容器中。

编辑:也许我误解了你的情况,你的情况如下这个

相关内容