4

我正在尝试使用 CronJob 以 1 分钟的定期间隔运行 shell 脚本。

我在我的 openshift 模板中创建了以下 Cron 作业:

- kind: CronJob
  apiVersion: batch/v2alpha1
  metadata:
    name: "${APPLICATION_NAME}"
  spec:
    schedule: "*/1 * * * *"
    jobTemplate:
      spec:
        template:
          spec:
            containers:
            - name: mycron-container
              image: alpine:3
              imagePullPolicy: IfNotPresent

              command: [ "/bin/sh" ]
              args: [ "/var/httpd-init/croyscript.sh" ]
              volumeMounts:
              - name: script
                mountPath: "/var/httpd-init/"
            volumes:
            - name: script
              configMap:
                name: ${APPLICATION_NAME}-croyscript
            restartPolicy: OnFailure
            terminationGracePeriodSeconds: 0

    concurrencyPolicy: Replace

以下是在此作业中作为卷插入的 configmap:

- kind: ConfigMap
  apiVersion: v1
  metadata:
    name: ${APPLICATION_NAME}-croyscript
    labels:
      app: "${APPLICATION_NAME}"
  data:
    croyscript.sh: |
      #!/bin/sh
      if [ "${APPLICATION_PATH}" != "" ]; then
          mkdir -p /var/httpd-resources/${APPLICATION_PATH}
      fi
      mkdir temp
      cd temp 
      ###### SOME CODE ######

此 Cron 作业正在运行。正如我所看到的那样,工作名称每 1 分钟被替换一次(按照我的工作计划)。但它没有执行 shell 脚本 croyscript.sh 我在这里做错了吗?(可能是我插入了配置映射错误,所以 Job 无法访问 shell 脚本)

4

1 回答 1

1

尝试以下方法

更新 configmap 位置的权限

            volumes:
            - name: script
              configMap:
                name: ${APPLICATION_NAME}-croyscript
                defaultMode: 0777

如果这个不起作用,很可能已安装卷中的脚本可能具有只读权限。使用 initContainer 将脚本复制到不同的位置并设置适当的权限并在命令参数中使用该位置

于 2019-11-05T11:43:48.387 回答