很抱歉,如果标题没有说清楚。
我有一个文件每15分钟读一次,并在其中找到一个特定的模式(例如超时)。文件没有任何固定的更新频率。
预期结果: - 1.如果在15分钟内找到3次模式,则运行command1。 2.如果在15分钟内找到5次模式,请运行command2。
每次检查从最后读取位置读取的文件。
谢谢, GRV
答案 0 :(得分:1)
执行此操作的一种方法是使用cron
作业。它比其他解决方案更复杂,但它非常可靠(即使你的“检查脚本”崩溃,它会在经过一段时间后由cron
再次调用)。 cron
可以是:
*/15 * * * * env DISPLAY=:0 /folder/checkscript >/dev/null 2>&1
在您的情况下可能不需要env DISPLAY=:0
,或者可能需要$DISPLAY
,具体取决于您的脚本(注意:您可能需要根据您的情况进行调整,运行echo "checkscript"
以查找你在案件上的变量。)
您的#!/bin/bash
if [ -f /tmp/checkVarCount ]; then oldCheckVar="$(cat /tmp/checkVarCount)"; else oldCheckVar="0"; fi
checkVar="$(grep -o "pattern" /folder/file | wc -l)"
echo "$checkVar" > /tmp/checkVarCount
checkVar="$(($checkVar-$oldCheckVar))"
if [ "$checkVar" -eq 3 ]; then command1; fi
if [ "$checkVar" -eq 5 ]; then command2; fi
exit
可能是:
if [ "$checkVar" -ge 3 ] && [ "$checkVar" -lt 5 ]; then command1; fi
if [ "$checkVar" -ge 5 ]; then command2; fi
它不包含在您的问题中,但如果您想要运行命令,如果找到模式4次或7次,那么您可以将上面的相关部分更改为:
std::cout << 2 * a << "\n"; //Unix style line break