我创建脚本并将其提供给制作团队。 并且制作团队必须每天运行所有这些脚本。 如果有100个脚本,他们必须为特定日期运行nohup命令100次。
例如
nohup abc.sh 2018-03-01 &
nohup abc1.sh 2018-03-01 &
nohup abc2.sh 2018-03-01 & and so on till the last script.
现在我已经完成了以下Wrapper
echo "*** Start time ---> `date '+%Y-%m-%d %H:%M:%S'` ***"
for date in `cat datefile_Prepaid_data`
do
date1=`echo $date|cut -d"|" -f1`
echo $date1
sh abc.sh $date1
sh abc1.sh $date1
sh abc2.sh $date1 and so on till the last script
return_code=$?
if [ ${return_code} -eq 0 ]
then
echo "\n Success... for date $date "
else
echo "\n Failed... for date $date .. So exiting."
exit 1
fi
done
但问题是这个包装器逐个运行脚本。我们是否有另一种方法来实现这一点,脚本也应该并行运行。
我创建了一个单独的文件' datefile_Prepaid_data'具有包装应该运行的日期。
答案 0 :(得分:1)
嗨如果你从脚本中看到你没有并行运行它们。要并行运行它们,您必须在后台运行每个作业。如下所示: -
sh abc.sh $date1 &
sh abc1.sh $date1 &
sh abc2.sh $date1 &
#and so on till the last script
但这里的一个问题是它会立即从return_code=$?
开始执行脚本。因此,您必须放置wait
命令,以便它应该等到上一个作业完成。
wait
#now below commend will execute only when all jobs completes.
#also it will wait till all job completes successfully
return_code=$?
现在还有一个问题。您的$?
将为您提供上次完成作业的退出状态。如果没有成功运行,则下面的逻辑将被错误地执行。因此,您必须根据当前要求修改以下条件。
if [ ${return_code} -eq 0 ]
要知道脚本是否成功执行,只需在每个作业中添加以下脚本: -
在所有abc.sh到abc99.sh
echo "Job $0 completed with exit status :$? >> job_status.log
现在给你一个完整的答案: -
echo "*** Start time ---> `date '+%Y-%m-%d %H:%M:%S'` ***"
for date in `cat datefile_Prepaid_data`
do
date1=`echo $date|cut -d"|" -f1`
echo $date1
sh abc.sh $date1 &
sh abc1.sh $date1 &
sh abc2.sh $date1 &
#and so on till the last script
done
在所有abc.sh到abc99.sh
echo "Job $0 completed with exit status :$? >> job_status.log