当前位置: 首页 > 知识库问答 >
问题:

cron作业kubernetes中的访问日志

段干安和
2023-03-14

我在kubernetes中运行cron作业,作业成功完成,我将输出记录到日志文件中(路径:存储/日志),但由于容器已完成,我无法访问该文件。

apiVersion: v1
items:
- apiVersion: batch/v1beta1
  kind: CronJob
  metadata:
    labels:
      chart: cronjobs-0.1.0
    name: cron-cronjob1
    namespace: default
  spec:
    concurrencyPolicy: Forbid
    failedJobsHistoryLimit: 1
    jobTemplate:      
      spec:
        template:
          metadata:          
            labels:
              app: cron
              cron: cronjob1
          spec:
            containers:
            - args:
              - /usr/local/bin/php
              - -c
              - /var/www/html/artisan bulk:import
              env:
              - name: DB_CONNECTION
                value: postgres
              - name: DB_HOST
                value: postgres
              - name: DB_PORT
                value: "5432"
              - name: DB_DATABASE
                value: xxx
              - name: DB_USERNAME
                value: xxx
              - name: DB_PASSWORD
                value: xxxx
              - name: APP_KEY
                value: xxxxx
              image: registry.xxxxx.com/xxxx:2ecb785-e927977
              imagePullPolicy: IfNotPresent
              name: cronjob1
              ports:
              - containerPort: 80
                name: http
                protocol: TCP              
            imagePullSecrets:
            - name: xxxxx
            restartPolicy: OnFailure          
            terminationGracePeriodSeconds: 30
    schedule: '* * * * *'
    successfulJobsHistoryLimit: 3

是否有无论如何我可以让我的日志文件内容显示在kubectl日志命令或其他替代?

共有2个答案

梁昊天
2023-03-14

我想你应该知道,pod一直存在,因为你有successfulJobsHistoryLimit:3。想必您的观点是,您的日志记录将被记录到一个文件中,而不是标准输出,因此您不会在kubectl日志中看到它。如果是这样的话,您也可以登录到stdout,或者在作业中添加一些内容,以便在最后记录文件的内容,例如在一个预停止挂钩中。

蒋茂
2023-03-14

Cronjob根据spec.schedule运行pod。完成任务后,pod的状态将设置为completed,但cronjob控制器在完成任务后不会删除pod。日志文件内容仍然存在于pod的容器文件系统中。所以你需要做:

# here  you can get the pod_name from the stdout of the cmd `kubectl get pods`
$ kubectl logs -f -n default <pod_name>
 类似资料:
  • 问题内容: 我有一个必须执行重复任务的Web应用程序,发送消息和警报,我已经使用脚本页面在浏览器中加载它们时执行了这些任务,即http://example.com/tasks.php,我已经在我的Web应用程序的每个页面中都使用iframe表示。 现在,我想将其更改为使用CRON作业,因为第一种方法可能会导致卡纸性能,因此,我如何制作访问http://example.com/tasks.php的C

  • 我有一个webapp在Kubernetes集群的Docker-container中运行。该应用程序有一个endpoint,我想定期调用。应用程序在多个节点/吊舱上运行,重要的是只有一个节点执行endpoint发起的任务。我查看了Kubernetes Cron作业,但没有找到任何关于从Kubernetes Cron作业调用endpoint的文档。有人对解决这个问题有什么建议吗?在只有一个节点执行任务

  • 为了检测cron作业中可能发生的故障,我设置了另一个cron作业来检查crontab发出的上一个日志: 手动运行时,一切正常: 剧本是这样写的 Crontab: 但当使用crontab运行时,日志读取为空。我错过了什么?

  • 我设置了一个cron任务来调用这个漂亮的脚本。在groovy脚本中,我使用“ch.qos.logback”来记录日志。 如果我手动运行脚本,日志工作正常,但是当通过cron作业运行时,没有输出到日志文件。 有人见过类似的问题吗?谢谢你!

  • 我们正在Kubernetes上部署Rails应用程序。 任务作为Docker映像构建过程的一部分运行。 我们希望在每个部署上运行 rake 任务,如 rake db:migrate 任务和其他任务。 当前的解决方案,我们正在使用 kubectl exec。 获取pods列表 然后在rails pod上执行: ' 我们需要使用kubernentes cron工作(. yaml)来启动我们的rake