为啥成功执行 Cron 作业会停止将日志进一步附加到文件中

Posted

技术标签:

【中文标题】为啥成功执行 Cron 作业会停止将日志进一步附加到文件中【英文标题】:Why does Successful execution of Cron job stops further appending of log onto a file为什么成功执行 Cron 作业会停止将日志进一步附加到文件中 【发布时间】:2021-07-27 12:22:06 【问题描述】:

我正在开发 Openshift 项目。我使用 yaml config 配置了一个 cron 作业。在我们的应用程序中,所有日志都附加到 Persistent Volume 内的文件中。一旦 cron 作业成功执行以清除文件,则不会附加更多日志。

我的观察:

    最初我认为 PV 本身不是 Read-Write Many,因此我将其更改为 Read-Write Many 并且仍然观察到相同的行为。 cron 作业 yaml 中提到的图像存在一些图像问题。但我尝试了不同的图像,但仍然发现同样的问题。

谁能解释我并为以下问题找到一个合理的解决方案?

编辑:

是的,日志仅在打开文件时被配置为 APPEND。我知道 PV 的访问模式不能控制 IO 操作。

【问题讨论】:

【参考方案1】:

首先您应该检查日志是如何记录在 PV 后端存储的文件中的。例如,当应用程序开始将消息记录到文件时,应以“APPEND”模式打开日志文件。 PV 访问模式,例如 ReadWriteMany 和 ReadWriteOnce 不控制应用程序透视图的 IO,它只考虑节点,而不考虑 Pod 和应用程序。详情请参考Access Modes。

ReadWriteOnce -- the volume can be mounted as read-write by a single node
ReadOnlyMany -- the volume can be mounted read-only by many nodes
ReadWriteMany -- the volume can be mounted as read-write by many nodes

换句话说,这意味着 k8s 不确保 pod 和应用程序上的文件处理。或者 IO 操作取决于后端存储或文件系统特性,例如 block(iscsi, ebs ...) 或文件单元 (nfs, glusterfs ...) IO。

【讨论】:

以上是关于为啥成功执行 Cron 作业会停止将日志进一步附加到文件中的主要内容,如果未能解决你的问题,请参考以下文章

cron 作业会杀死最后一个 cron 执行吗?

如何取消或停止Google App Engine Cron作业

为啥在 Kubernetes cron 作业中可能会创建两个作业,或者可能不会创建作业?

管理由 cron 作业创建的日志文件

查看crontab执行记录

如何记录 cron 作业?