Shell - 如何使Logrotate等到文件被复制/写入然后再继续

问题描述 投票:0回答:1

我有一个大的日志文件,每小时由cron复制到/ var / log /。几分钟后,logrote开始使用压缩和重命名工作。

我的问题是,复制过程尚未完成。结果是,复制的日志文件和archieve已损坏。

所以我想要的是一个shell脚本,它先查看复制的文件并检查它是否正在使用中。

#!/bin/bash
until err_str=$(lsof /var/log/logfile.txt 2>&1 >/dev/null); do
  if [ -n "$err_str" ]; then
    # lsof printed an error string, file may or may not be open
    echo "lsof: $err_str" >&2

    # tricky to decide what to do here, you may want to retry a number of times,
    # but for this example just break
    break
  fi

  # lsof returned 1 but didn't print an error string, assume the file is open
  sleep 1
done

这不行,有什么问题吗?

shell loops logrotate
1个回答
0
投票

你可以尝试使用 -

而err_str = $(lsof /var/log/logfile.txt 2> / dev / null);如果[-z“$ err_str”];然后

© www.soinside.com 2019 - 2024. All rights reserved.