Kubernetes 成功显示 Cron Job 但未获得所需结果

Kubernetes show Cron Job Successfully but when not getting desired result

当我 运行 将 cronjob 放入 Kubernetes 时,那个时候 cron 让我成功执行了 cron 但没有得到想要的结果

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: {{ $.Values.appName }}
  namespace: {{ $.Values.appName }}
spec:
  schedule: "* * * * *"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: test
              image: image
              command: ["/bin/bash"] 
              args: [ "test.sh" ]
          restartPolicy: OnFailure

另外,我正在分享test.sh

#!/bin/sh
rm -rf /tmp/*.*
echo "remove done"

cronjob 运行ning 成功但是 当我检查容器时,文件没有被删除到 /tmp 目录

test.sh更改为:

#!/bin/sh

set -e

rm -rf /tmp/*.*
echo "remove done"

如果没有 -e,您的 bash 脚本将 return 具有与其上一个命令相同的状态。在本例中,它是一个 echo,因此它的状态将始终为 0(成功)。如果 rm 命令失败,使用 set -e 将使您的脚本中止并失败。


此外,如果没有任何卷装载,此 cron 作业不会做任何有意义的事情。如果你想从另一个容器中删除一些文件,你需要在那个容器中使用 Cron(或者有一个带有 ReadWriteMany 的卷)。

Cronjob 运行 在一个特定的容器中,如果你想从另一个容器中删除文件或目录,它将不起作用。

如果您的主容器 运行正在部署,而当您的作业或 cronjob 被触发时,它会创建一个 新容器 (POD) 有独立的文件系统和挂载选项。

如果你想实现这种情况,你必须使用 PVCReadWriteMany,其中 多个容器 (POD) 可以与您的 单个 PVC 连接并共享文件系统。

通过这种方式,您的 cronjob 容器 (POD) 开始使用现有的 PVC 文件系统,您可以使用 job 或 cronjobs 删除目录。

将相同的 PVC 挂载到 cronjob 容器和主容器,它就会工作。

您需要将持久卷附加到您正在使用的 pod 和 cronjob 上,以便它可以在脚本执行时删除所有文件。您需要在脚本中相应地安装和提供路径。要添加 kubernetes cronjobs,请仔细阅读