我正在后台运行ANT任务,并以60秒的间隔检查该任务是否完成。如果不是,每隔60秒,屏幕上就会显示一条消息 - “部署过程仍然在运行。自部署开始以来已经过了几秒钟”,其中$ sleep是60,120,180 n等等。
有1200秒的限制,之后脚本将通过'ant log'命令显示日志,并询问用户是否继续。如果用户选择继续,则会在时间限制内添加300秒,然后重复该过程。
我用于此任务的代码是 -
ant deploy &
limit=1200
deploy_check()
{
while [ ${slept:-0} -le $limit ]; do
sleep 60 && slept=`expr ${slept:-0} + 60`
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo "Deploy process is still running. $slept seconds since deploy started."
else
wait $! && echo "Application ${New_App_Name} deployed successfully" || echo "Deployment of ${New_App_Name} failed"
break
fi
done
}
deploy_check
if [ $$ = "`ps -o ppid= -p $!`" ]; then
echo "Deploy process did not finish in $slept seconds. Here's the log."
ant log
echo "Do you want to kill the process? Press Ctrl+C to kill. Press Enter to continue."
read log
limit=`expr ${limit} + 300`
deploy_check
fi
现在,问题是 - 这段代码无效。这看起来像一个非常好的代码,然而,这是行不通的。任何人都可以指出这个代码有什么问题。
答案 0 :(得分:1)
如果用户选择继续,deploy_check
再次运行,但用户再也没有机会继续或取消(尽管可以随时按下Ctrl-C)。所以你可能希望将它包装在while
循环中。
此外,按Ctrl-C可能不会杀死子进程。您需要提示是或否,如果是,请执行kill $!
。
修改强>
以下是您的代码流程:
ant deploy
仍处于运行状态(除非脚本中的其他位置设置了陷阱,用于处理Ctrl-C并对其执行kill
ant deploy
流程)您需要一个循环才能再次出现提示。