我是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