Ubuntu 14.04 lsof脚本效率

时间:2017-06-07 14:08:43

标签: arrays ubuntu-14.04

我是Stack Overflow的新手,已经搜索了我的问题,并提出了部分答案。

我正在尝试调查安装在Ubuntu 14.04上的NSF位置的sftp文件,我对此还不是很熟悉。下面的脚本工作,我得到了Stack Overflow搜索。不幸的是,即使文件数组为空,脚本似乎效率也非常低,并且每次最多可以耗费CPU 10-10秒!在一个月或两个月内将该系统投入生产时,这将是不可接受的。我已将这些位置匿名/标记,以便他们轻松关注。

#!/bin/bash

#store the fileNames of any 7 zip files in the upload directory into an array
Files=(/mnt/NFStoSFTPServer/*.7z)
Run=($(ls -d /mnt/NFStoSFTPServer/*.7z))

#loop through the array to unzip the files and move them to the application polling directory
if [ -z "$Run" ]; then
     echo "There are no files to upload"
else
for i in "${Files[@]}"
        do
                #check if the file is being used
                check=`lsof | grep $i`
                if [ -z "${check-unset}" ]; then
                        echo $i
                        echo "The file is done uploading"
                        #the file is not being used, so unzip it to the app polling location
                        7z x $i -o/opt/appPollingLocation
                        #rename the tmp file to xml
                        find -L /opt/appPollingLocation -type f -name $
                        while IFS= read -r -d '' FNAME;
                                do
                                mv -- "$FNAME" "${FNAME%.tmp}.xml"
                        done
                        #move the zip file for safe keeping
                        mv $i /opt/archiveLocation
                fi
done
fi

我可以做些什么来提高效率?如果删除了lsof检查,则该过程失败,我认为这可能是减速所在的位置?

将.tmp文件重命名为.xml不是可选的,由于某些其他限制,无法在上游修复。 .7z文件移动 是可选的,但暂时存档(并定期,自动清除)这些文件似乎是一种很好的做法,可以在出现意外处理失败时帮助我们的支持团队。

同样,我的目标是在较小的性能影响下获得相同的结果,因为此轮询将在每分钟运行一次。

欣赏任何可以给出的建议!

美国东部时间上午10:52更新:刚刚测试并意识到我错了,"没有要上传的文件"消息永远不会打印,所以也许我的第一个if语句不正确。

更新美国东部时间上午11:35:找到一种方法来纠正空数组慢,更新脚本以反映出来。该过程的实际剩余部分仍然可以最大化CPU。

美国东部时间上午11:58更新:添加htop图像。当有一些.7z文件需要处理时,LSOF似乎消耗了73%的CPU htop

0 个答案:

没有答案