diff --git a/bin/fix b/bin/fix new file mode 100755 index 0000000..cc70b2e --- /dev/null +++ b/bin/fix @@ -0,0 +1,47 @@ +#!/bin/bash +# +# Try to fix a service +# +# By default, the problem is "solved" the Microsoft way +# (stop and start). +# To do something more intelligent, create a +# /federated/services//fix +# script. + +if [ "$#" != 1 ]; then + echo Usage: $0 service + exit 1 +fi + +SERVICE="$1" + +if /federated/bin/check ${SERVICE}; then + echo "${SERVICE} doesn't seem to be broken" + exit 0 +fi + +/federated/bin/stop ${SERVICE} +/federated/bin/start ${SERVICE} + +if /federated/bin/check ${SERVICE}; then + echo "${SERVICE} was (probably) fixed by a restart" + exit 0 +fi + +[ -e /federated/services/${SERVICE}/fix ] && . /federated/services/${SERVICE}/fix + +if /federated/bin/check ${SERVICE}; then + echo "${SERVICE} was (probably) fixed by the service fix script" + exit 0 +fi + +/federated/bin/stop ${SERVICE} +/federated/bin/start ${SERVICE} + +if /federated/bin/check ${SERVICE}; then + echo "${SERVICE} was (probably) fixed by restarting after running the fix script" + exit 0 +fi + +echo "${SERVICE} is still broken. Please improve the fix script." +exit 1