123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #!/bin/sh
- SVDIR=/etc/sv
- RUNSVDIR=/etc/runit/runsvdir
- for SERVICEDIR in /var/service /service NONE; do
- if [ -d "${SERVICEDIR}" ]; then
- break
- fi
- done
- if [ "${SERVICEDIR}" = "NONE" ]; then
- echo "No service directory found"
- exit 99
- fi
- ########################################
- if [ "$(basename $0)" = "rc-service" ]; then
- SVC="$1"
- ACTION="$2"
- if [ "$UID" != "0" ]; then
- echo "Need root privileges"
- exit 13
- fi
- elif [ "$(basename $0)" = "rc-update" ]; then
- ACTION="$1"
- SVC="$2"
- RUNLEVEL="$3"
- else
- echo "Unknown basename \"$0\""
- exit 11
- fi
- if [ -z "${RUNLEVEL}" ]; then
- RUNLEVEL=$(readlink ${RUNSVDIR}/current)
- RUNLEVEL=$(basename ${RUNLEVEL})
- fi
- ########################################
- ### DEBUG
- if [ -r /tmp/service.debug.on ]; then
- printf 2>/dev/null >>/tmp/service.log "%-8s %s\n" "${ACTION}" "${SVC}"
- fi
- ########################################
- if [ "${ACTION}" != "show" ]; then
- if [ ! -d "${SVDIR}/${SVC}" ]; then
- echo "Could not find service \"${SVC}\""
- exit 1
- fi
- fi
- echo "${ACTION}" | grep -q "start\|stop\|status\|show\|add\|delete"
- if [ $? -ne 0 ]; then
- echo "Unknown action \"${ACTION}\""
- exit 10
- fi
- if echo "${ACTION}" | grep -qE "start|stop|status"; then
- if [ ! -L "${SERVICEDIR}/${SVC}" ]; then
- echo "Service \"${SVC}\" not enabled"
- exit 9
- fi
- fi
- case "${ACTION}" in
- "start")
- OUT=$(sv u "${SVC}" 2>&1)
- echo "Service \"${SVC}\" started"
- exit 0
- ;;
- "restart")
- OUT=$(sv restart "${SVC}" 2>&1)
- echo "Service \"${SVC}\" restarted"
- exit 0
- ;;
- "stop")
- OUT=$(sv d "${SVC}" 2>&1)
- echo "Service \"${SVC}\" stopped"
- exit 0
- ;;
- "status")
- OUT=$(sv s "${SVC}" 2>&1)
- if echo "${OUT}" | grep -q "^run"; then
- echo "Service \"${SVC}\" started"
- exit 0
- elif echo "${OUT}" | grep -q "^down.*normally up"; then
- echo "Service \"${SVC}\" crashed"
- exit 1
- fi
- ;;
- "add")
- if [ ! -d "${RUNSVDIR}/${RUNLEVEL}" ]; then
- echo "Unknown runlevel \"${RUNLEVEL}\""
- exit 12
- fi
- if [ ! -L "${RUNSVDIR}/${RUNLEVEL}/${SVC}" ]; then
- ln -s "${SVDIR}/${SVC}" "${RUNSVDIR}/${RUNLEVEL}/${SVC}"
- echo " * service ${SVC} added to runlevel default"
- exit 0
- else
- echo " * rc-update: ${SVC} already installed in runlevel 'default'; skipping"
- exit 0
- fi
- ;;
- "delete")
- if [ ! -d "${RUNSVDIR}/${RUNLEVEL}" ]; then
- echo "Unknown runlevel \"${RUNLEVEL}\""
- exit 12
- fi
- if [ -L "${RUNSVDIR}/${RUNLEVEL}/${SVC}" ]; then
- rm "${RUNSVDIR}/${RUNLEVEL}/${SVC}"
- echo " * service ${SVC} removed from runlevel default"
- exit 0
- else
- echo " * rc-update: service '${SVC}' is not in the runlevel '${RUNLEVEL}'"
- exit 0
- fi
- ;;
- "show")
- for S in $(cd ${SVDIR}; ls -1); do
- printf " %-20s |" "${S}"
- for RL in $(cd ${RUNSVDIR}; find -name "${S}"); do
- printf " %s" "$(echo ${RL} | cut -d/ -f2)"
- done
- printf "\n"
- done
- exit 0
- ;;
- *)
- ### DEBUG
- if [ -r /tmp/service.debug.on ]; then
- printf >>/tmp/service.log "UNKNOWN ACTION ${ACTION}\n" "${ACTION}" "${SVC}"
- fi
- ;;
- esac
|