【发布时间】:2015-12-01 09:07:45
【问题描述】:
我正在尝试找出一种方法来监控我从脚本中转储的文件。如果在子文件中没有看到增量,则终止我的脚本。
我这样做是为了在不需要时释放资源。这是我的想法,但我认为我的方法会增加 CPU 的负担。任何人都可以建议更有效的方法吗?
下面的脚本假设每 15 秒轮询一次并收集同一文件的两个文件大小,如果两个样本的大小相同则退出。
checkUsage() {
while true; do
sleep 15
fileSize=$(stat -c%s $1)
sleep 10;
fileSizeNew=$(stat -c%s $1)
if [ "$fileSize" == "$fileSizeNew" ]; then
echo -e "[Error]: No activity noted on this window from 5 sec. Exiting..."
kill -9 $$
fi
done
}
我打算这样称呼它(在后台):
checkUsage /var/log/messages &
如果有人建议如何监视 tail 命令,并且如果 tail 上没有任何打印内容,我也可以得到解决方案,然后退出。不知道为什么人们会感到困惑。这个问题的最终目标是检查某个文件是否在最后 15 秒内被编辑。如果不退出或抛出一些错误。
我已经通过上面的脚本实现了这个,但我不知道这是否是实现这个的最聪明的方法。如果有任何替代方法或更好的方法,我已经问过这个问题以了解其他人的观点。
【问题讨论】:
-
最终目标是什么?听起来像是 XY 问题...
-
最终目标是确保如果 /var/log/messages 在 15 秒内没有增加其大小,则终止我的脚本。
-
你认为负担在哪里?
sleep不会消耗任何资源,并且两个stat调用对于您要完成的事情很难避免。你在哪里看到问题?一个解决方案允许使用多少资源才能被接受? -
循环总计 25 秒,消息显示 5 秒。也许更仔细地考虑时间应该是什么。
-
不妨用 stat 检查 mtime。从逻辑上讲,检查文件大小是可以的,但这只是说事情没有改变的一种奇怪方式,而 mtime 则更直接。
标签: linux bash shell unix tail