在openshift docker中以cron的身份执行脚本

时间:2019-07-17 06:55:35

标签: bash docker openshift

我们有一个openshift环境,每天我们需要将数据从某些持久性卷源备份到目标。我正在考虑为此目的专门设置一个容器,并将入口点指定为执行此复制操作的bash脚本。如何确保该脚本每天仅执行一次?我可以提到脚本中的睡眠,但这不是一个好方法,并且如果POD在这之间自动重新启动,那将是有效的。请让我知道正确的做法吗?我正在使用OpenShift Web控制台:v3.11.98

我可以使用睡眠,但不确定如何解决Pod重新启动的情况

#!/bin/bash

if [ ! -e /source/]
then
        echo source /source is not mounted in the container
        exit 20
fi

if [ ! -e  /destination ]
then
        echo source /destination is not mounted in the container
        exit 20
fi

today1=`date +"%Y-%m-%d"`


mkdir /destination/${today1}
cp -r /source/* /destination/${today1}

我如何每天运行此脚本以将文件从一个持久性卷备份到另一个。除了在docker中运行之外,还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如评论中所述,Kubernetes CronJob应该很容易解决此问题。此资源在OpenShift上也可用。

创建需要备份的容器。在这种情况下,/backup-script.sh是执行备份的脚本。

以下YAML文件应在OpenShift中创建一个cronjob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: backup-job
spec:
  schedule: "* 23 * * *" 
  jobTemplate:            
    spec:
      template:
        spec:
          containers:
          - name: backup-container-name
            image: PATH/TO/YOUR/BACKUP-CONTAINER
            command: ["/bin/sh", "/backup-script.sh"]
            restartPolicy: OnFailure

spec.schedule指定容器启动的频率。它遵循以下cron格式:https://en.wikipedia.org/wiki/Cron

注意::您应仔细检查进行备份所需的权限。如果它需要特权限制,那么您还必须添加具有指定特权的serviceAccount的spec.jobTemplate.spec.serviceAccount

此资源的完整YAML参考可以在这里找到:https://docs.openshift.com/container-platform/3.11/rest_api/apis-batch/v2alpha1.CronJob.html