linux - BASH中如何从一个日志文件中准确抓取过去一小时的日志?

标签 linux bash unix awk

我有一个 cron 作业的日志文件,其中的条目使用以下格式

Mar  8 17:30:01 hostname CROND[PROC_#]: (user) CMD (/path/to/job/)

我希望能够定期检查日志以查看是否运行了特定的 CRON 作业(每小时运行一次)。通过 grep 很容易找到我想要的日志。

grep name_of_job logfile

但我不确定如何准确地只抓取过去一小时的日志,以查看是否有任何 cron 作业已运行。

我尝试使用 awk 命令获取最后一小时 based on this post但我在使用 awk 时遇到了问题,因为我的日期戳分为多个字段。

最佳答案

您可以在 GNU awk 中执行此操作:

$ cat tst.awk
BEGIN {
    FS="[ :]+"
    nowSecs  = systime()
    thisYear = strftime("%Y")
}
{
    mthNr = (match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3
    inSecs = mktime(thisYear" "mthNr" "$2" "$3" "$4" "$5)
}
(nowSecs - inSecs) <= 60
$ awk -f tst.awk file

如果您的输入文件和当前日期可以跨越年份边界,那么您需要添加一些逻辑来处理它,因为您的输入文件不包含年份。

关于linux - BASH中如何从一个日志文件中准确抓取过去一小时的日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880325/

相关文章:

linux - geniso 与 hfsbless 不工作

linux - 脚本转到文件夹的每个子目录并运行命令

unix - 在 Unix 上计算一列输出之和的最短命令?

bash - 如何在 .screenrc 中转义管道以便在启动时运行命令?

linux - 文件列表

ruby - 如何使用系统和反引号运行 Unix 命令?

linux - 经过一定时间后释放字符驱动程序中的互斥量

linux - 构建 PostgreSQL 时链接器错误 "undefined reference to SSL_get_peer_certificate"

linux - ELF格式的重定位信息在哪里?

linux - 在Linux PowerShell和Linux bash中使用 'rm -rf'