检查 cronjob 是否仍在写入日志文件

检查 cronjob 是否仍在写入日志文件

我想定义一个这样的 cronjob:

@hourly /path/to/my/script.sh &> "/path/to/my/logs/$(date +%Y-%m-%d_%H-%M-%S.txt)"

因此它应该将脚本的输出写入日志文件。现在我想制作第二个脚本(最好使用 PHP),该脚本读取所有文件/path/to/my/logs/并通过邮件发送文件。创建这样的脚本应该不成问题,但我想知道如何检测创建文件的 cronjob 是否已完成并且不再写入文件。我不想发送已创建但 cronjob 仍在写入的文件。

有没有通用的方法来检测这一点,以及在 PHP 中有没有一种方法可以检测这一点?

答案1

您可能需要使用一个方便的小工具,例如Crontab 生成器构建作业定义。要按小时运行作业,您可以执行以下操作:

0 * * * * /path/to/script.sh > /path/to/output/log_$(date +\%Y-\%m-\%d).txt >/dev/null 2>&1

从那里,你可以让你的 PHP 脚本使用功能filemtime获取文件上次修改的时间。如果 cron 作业需要 X 秒才能运行,并且输出文件的修改日期在 X+60 秒内(或您满意的任何数字),那么您可以让脚本读取数据并按您希望的方式处理它。

答案2

通过cron、运行的作业crontab不会在桌面上的同一运行时环境中运行。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 开头#!/bin/bash)来设置环境,然后调用所需的程序。

相关内容