gpt4 book ai didi

linux - 编写脚本以获得更好的错误检测、时间和资源效率的更好方法?

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:04 28 4
gpt4 key购买 nike

我需要有关如何改进以下脚本以提高效率(时间和资源,以及更好的错误检测)的建议。以下是脚本功能的简单描述:

功能:脚本在 crontab 中为“ins”用户运行非常分钟,在“输入路径”中搜索 .DAT 文件。如果找到 .dat 文件,将其移动到“工作目录”,作为批处理执行,并在 .dat 文件执行完成后将其移动到“输出文件夹”。 .dat 文件包含一系列类似的命令,用于将数字插入数据库。

    #!/usr/bin/ksh

def_path="/apps/ins/"
env_path="/apps/ins/eir/bin"
input_path="/apps/ins/eir/batch/input/"
work_path="/apps/ins/eir/batch/working/"
output_path="/apps/ins/eir/batch/output/"
moved_path="/apps/ins/eir/batch/processed/"
log="/apps/ins/BLA/log/"
date=`date '+%d%b%y'`

cd $input_path
listcount=`ls -rt *.dat |wc -l`
list=`ls -rt *.dat`
echo "`date +%H:%M:%S`| Total No of DAT files available are # $listcount #\nName of the files are...\n $list " >> $log/$date.log 2>&1

if [[ -e $def_path/.bla_processing ]];
then
echo "`date +%H:%M:%S`| Script is already running" >> $log/$date.log 2>&1
exit
fi

for fname in `ls *.dat | awk -F. '{print $1}'`
do

touch $def_path/.bla_processing
mv $input_path/$fname.dat $work_path/$fname.dat

echo "##################################################" >> $log/$date.log 2>&1
echo "## Filename = $fname.dat ## Time = `date +%H:%M:%S` ##" >> $log/$date.log 2>&1
echo "##################################################" >> $log/$date.log 2>&1
cd $env_path
. /apps/ins/.profile >> $log/$date.log 2>&1
echo "Username is `whoami`" >> $log/$date.log 2>&1

$env_path/mip_cmd EXECUTE:$work_path/$fname.dat,$output_path/$fname.out,100; >> $log/$date.log 2>&1
sleep 2
echo "`date +%H:%M:%S`| Moving the file *** $fname.dat *** to path |$moved_path|" >> $log/$date.log 2>&1
mv $work_path/$fname.dat $moved_path/$fname.dat.moved
cmd_exec=`cat $output_path/$fname.out |grep ":" |wc -l`
echo "`date +%H:%M:%S`| Total commands executed are `expr $cmd_exec / 2`" >> $log/$date.log 2>&1
echo "`date +%H:%M:%S`| Total Sucessfully executed commands are `cat $output_path/$fname.out |grep "C1:00000;" |wc -l`" >> $log/$date.log 2>&1
echo "--------------------------------------------------" >> $log/$date.log 2>&1
echo "#### SCRIPT WILL PROCESS THE NEXT FILE ###########" >> $log/$date.log 2>&1
echo "--------------------------------------------------" >> $log/$date.log 2>&1
echo "" >> $log/$date.log 2>&1
rm $def_path/.bla_processing
exit
done

最佳答案

由于您使用“$def_path/.bla_processing”作为一种形式的锁,您可能应该在继续执行脚本的其余部分之前首先检查它是否存在。

此外,“touch $def_path/.bla_processing”和“rm $def_path/.bla_processing”可以移出 for 循环。

您的代码现在所做的是,仅处理第一个文件,脚本将退出。所以在 for 循环的末尾调用“exit”是没有必要的。

举个例子(在应用上述建议之后):

touch $def_path/.bla_processing
for fname in `ls *.dat | awk -F. '{print $1}'`
....
# remove the call to exit
done
rm $def_path/.bla_processing

关于linux - 编写脚本以获得更好的错误检测、时间和资源效率的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608737/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com