检查输出文件是否生成并填充了预期的日志-BASH
一个进程(在后台)应该创建一个文件(例如result.txt)并用5行日志填充它 我需要检查:1)文件是否存在,2)检查是否存储了所有日志(5行) 如果在xxx秒内未满足这些条件,则流程失败,并在终端中打印“失败”,否则打印“成功” 我想我需要使用while循环,但我不知道如何实现这些条件检查输出文件是否生成并填充了预期的日志-BASH,bash,file,while-loop,Bash,File,While Loop,一个进程(在后台)应该创建一个文件(例如result.txt)并用5行日志填充它 我需要检查:1)文件是否存在,2)检查是否存储了所有日志(5行) 如果在xxx秒内未满足这些条件,则流程失败,并在终端中打印“失败”,否则打印“成功” 我想我需要使用while循环,但我不知道如何实现这些条件 注意:行被追加到文件中(异步),我不必检查日志的符合性,只需检查是否存储了所有日志。这一行检查日志并等待2秒钟,然后失败: #!/bin/sh log_success() { [[ $(tail -
注意:行被追加到文件中(异步),我不必检查日志的符合性,只需检查是否存储了所有日志。这一行检查日志并等待2秒钟,然后失败:
#!/bin/sh
log_success() {
[[ $(tail -n "$2" "$1" 2> /dev/null | wc -l) -eq "$2" ]]
}
log_success 'file.log' 5 || sleep 2
if log_success 'file.log' 5; then
echo "success"
else
echo "fail"
fi
这是我的草稿:
FILE=/path/to/something
for (( ;; )); do
if [[ -e $FILE ]] && WC=$(wc -l < "$FILE") && [[ WC -ge 5 ]]; then
: # Valid.
fi
done
FILE=/path/to/something
对于(;);做
如果[[-e$FILE]]&&WC=$(WC-l<“$FILE”)&&[[WC-ge 5]];然后
:#有效。
fi
完成
或
FILE=/path/to/something
对于(;);做
如果[!-e$文件]];然后
:#文件不存在。做点什么。
elif WC=$(WC-l<“$文件”)&&&[WC-ge 5]];然后
:#有效。
其他的
:#文件不包含5行或更多行或不可读。无效的
fi
完成
不过,这一行可能仍然存在竞争条件方面的问题。这些行是否附加到文件中?您需要具体说明行的内容吗?是的,行是附加的,我不必检查日志的符合性,只需检查是否存储了所有行。这意味着您必须在附加新数据之前知道文件中的行数,然后再检查是否添加了另外5行。你的问题实际上很复杂,所以人们可能只有在你添加更多信息时才能提供帮助。检查是什么过程?发送日志的是同一个进程吗?这不是必需的,因为如果该进程成功,那么我将在接下来的步骤中删除该文件。因此,我需要检查文件是否包含5行(后台的进程应该生成此输出,而不是更多行)
FILE=/path/to/something
for (( ;; )); do
if [[ ! -e $FILE ]]; then
: # File doesn't exist. Do something.
elif WC=$(wc -l < "$FILE") && [[ WC -ge 5 ]]; then
: # Valid.
else
: # File doesn't contain 5 or more lines or is unreadable. Invalid.
fi
done