# 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
/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