X-Git-Url: http://git.onelab.eu/?p=mom.git;a=blobdiff_plain;f=pl_mop.sh;h=49222770d418f13607c09126939cd276521c18cc;hp=a278230e4cee1848d0ab333e8c9fa421a00d1399;hb=a7ab53cbaf3037b67fbda98fed3887c905d93e96;hpb=35fc6f409f7372549b7c07bddecc6dc9541160c9 diff --git a/pl_mop.sh b/pl_mop.sh index a278230..4922277 100755 --- a/pl_mop.sh +++ b/pl_mop.sh @@ -5,8 +5,6 @@ # Mark Huang # Copyright (C) 2005 The Trustees of Princeton University # -# $Id$ -# PATH=/sbin:/usr/sbin:$PATH @@ -187,10 +185,48 @@ kill_multi_nm(){ /etc/init.d/nm start fi } + +fix_rpm() { + echo "* Checking for stuck rpm processes" + + rpm_count=`pgrep -f "rpm" | wc -l` + + if [[ $rpm_count -ge 6 ]]; then + echo "* $rpm_count rpm processes found" + + # kill rpm processes, attempt up to 10 times and then give up + try_count=0 + rpm_count=`pgrep "rpm|yum" | wc -l` + while [[ $rpm_count -gt 0 ]]; do + echo "* killing rpm/yum processes" + killall -9 rpm rpmd rpmq rpmk yum + sleep 1 + rpm_count=`pgrep "rpm|yum" | wc -l` + try_count=`expr $try_count + 1` + if [[ $try_count -ge 10 ]]; then + echo "* failed to kill rpm processes" + return + fi + done + + # remove lock files + echo "* deleting rpm lock files" + rm -f /var/lib/rpm/__* + + # rebuild rpm database + echo "* rebuilding rpm database" + rpm --rebuilddb + + echo "* rpm repair sequence complete" + + fi +} + # XXX kill zombie slices run restart_services +run fix_rpm run kill_nonroot_nm