Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell-如何让Logrotate等待文件被复制/写入并继续_Shell_Loops_Logrotate - Fatal编程技术网

Shell-如何让Logrotate等待文件被复制/写入并继续

Shell-如何让Logrotate等待文件被复制/写入并继续,shell,loops,logrotate,Shell,Loops,Logrotate,我有一个很大的日志文件,cron每小时将它复制到/var/log/上。几分钟后,logrote开始压缩和重命名工作 我的问题是,复制过程尚未完成。结果是,复制的日志文件和归档文件已损坏 所以我想要的是一个shell脚本,它在复制文件之前查看并检查它是否正在使用 #!/bin/bash until err_str=$(lsof /var/log/logfile.txt 2>&1 >/dev/null); do if [ -n "$err_str" ]; then #

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

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

所以我想要的是一个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
这不起作用,有什么问题吗?

您可以尝试使用-

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

那么,犯错不总是一无所获吗?您正在将所有内容重定向到/dev/null。