我有一些我需要定期更新的Git回购。所以我写了一个简单的bash脚本
cd /repo1/path
git fetch --all
cd /repo2/path
git fetch --all
...
此脚本通过cron作业运行。 Git中的授权是通过SSH完成的。这里的问题是,有时一个或另一个回购拒绝证书,从而提示输入密码(这是回购管理的问题,在问题中未解决)。一旦我的脚本遇到这样的回购,它就会停止并且(我猜)等待密码输入,所以在它之后的所有回购都没有得到更新。
问题是如何处理这种情况 - 一个失败的回购不应该阻止其他人更新。
答案 0 :(得分:1)
可以使用这样的东西。
对于这个例子,我使用sleep而不是git来显示它如何更好地工作
#!/bin/bash
PIDS=() # Make pid array
cd /repo1/path #Go to dir
sleep 20 & #Command
x=$! #Save Pid
PIDS+=($x) #Add to pid array
Command[$x]="$(pwd)" # Add to Command array(will contain failed dirs)
cd /repo1/path #Same yo
sleep 20 &
x=$!
PIDS+=($x)
Command[$x]="$(pwd)"
cd /repo3/path
sleep 1 & #This one will exit before next part to show it doesn't
#appear in output
x=$!
PIDS+=($x)
Command[$x]="$(pwd)"
sleep 2 # Literally here just so previous command finishes
#(not needed in a real script)
for i in "${PIDS[@]}";do #Loop through the PIDS
if ps -ef | grep -v "grep" | grep "$i" > /dev/null 2>&1 ;then
#Check they're running, dump output
kill "$i" #Kill running ones
wait "$i" 2>/dev/null # Suppress output
echo "${Command[${i}]}" Failed # echo failed dirs
fi
done
/repo1/path Failed
/repo2/path Failed