Bash 并行运行Shell脚本
我创建脚本并将其交给生产团队。 生产团队每天都要运行所有这些脚本。 假设有100个脚本,它们必须在特定日期运行100次nohup命令 范例Bash 并行运行Shell脚本,bash,shell,unix,Bash,Shell,Unix,我创建脚本并将其交给生产团队。 生产团队每天都要运行所有这些脚本。 假设有100个脚本,它们必须在特定日期运行100次nohup命令 范例 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. 现在我已经完成了以下工作 echo "*** Start time ---> `date '+%Y-%m
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.
现在我已经完成了以下工作
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\u预付费\u数据”,其中包含包装器应该运行的日期。您好,如果您从脚本中看到您没有并行运行它们。要并行运行它们,您必须在后台运行每个作业。如下图所示:-
sh abc.sh $date1 &
sh abc1.sh $date1 &
sh abc2.sh $date1 &
#and so on till the last script
但这里的一个问题是,它将立即从return\u 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 "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
echo "Job $0 completed with exit status :$? >> job_status.log
你看到等待的手册页了吗?您可以执行类似于job1和job2&wait的操作,但您需要单独存储状态变量。显然,您必须在每个脚本调用结束时添加一个与,就像您在命令行中所做的那样。您好,Pierre,如果我在for循环中添加“&”,您的意思是说所有脚本都将并行运行?您好。不,我没有看到手册页。我会检查的。我想知道如何使用“等待”。和每个脚本的“状态变量”。嗨,现在我的同事说我必须为每个脚本添加返回代码。我们有更好的选择吗?好的,如果我添加“等待”,即使任何脚本失败,其余的作业也将运行并完成。是这样吗?
cat datefile`
dodate1=
echo$date | cut-d“|”-f1`echo$date1
sh abc.sh$date1&
echo“作业$0已完成,退出状态:$?>>Job\u status.logsh abc1.sh$date1&
echo”作业$0已完成,退出状态:$?>>job_status.log sh abc2.sh$date1&echo“job$0已完成,退出状态:$?>>job_status.log等待返回\u code=$?如果[${return\u code}-eq 0],则echo”\n成功。。。对于日期$date“else echo”\n失败。。。日期$日期。。所以退出。“退出1 fi是否正确?请检查“等待”和“回送作业$0已完成,退出状态:$?>>job_status.logIt将附加。我正在使用>
这将把所有日志附加到此文件中。完全没有覆盖。