X-Git-Url: http://git.onelab.eu/?p=mom.git;a=blobdiff_plain;f=pl_mop.sh;h=454982e9553b5ec8892945d36724ebabc7ca23ec;hp=a94afbfc04b62d302219f3942e44b7ec2e6f5caf;hb=76d55c06310c3ff54b36a6f9e075499b2d8091a6;hpb=e9973a891500bb929110ea7133a183c07c8bc422 diff --git a/pl_mop.sh b/pl_mop.sh index a94afbf..454982e 100755 --- a/pl_mop.sh +++ b/pl_mop.sh @@ -54,6 +54,7 @@ fix_etc_shadow() { # keep essential services running restart_services() { for service in sshd pl_sshd swapmon nm fprobe-ulog codemux; do + chkconfig --list $service | grep -q 3:on || continue echo "* Checking $service" status=$(service $service status) if [ $? -ne 0 ] || echo $status 2>&1 | grep -q stopped ; then @@ -186,10 +187,48 @@ kill_multi_nm(){ /etc/init.d/nm start fi } + +fix_rpm() { + echo "* Checking for stuck rpm processes" + + yum_count=`pgrep -f "yum clean all" | wc -l` + + if [[ $yum_count -ge 2 ]]; then + echo "* $yum_count yum 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