diff options
Diffstat (limited to 'catsit.in')
-rw-r--r-- | catsit.in | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/catsit.in b/catsit.in new file mode 100644 index 0000000..6e934f1 --- /dev/null +++ b/catsit.in @@ -0,0 +1,37 @@ +#!/bin/sh +set -eu + +die() { + echo "${0}:" "$@" >&2 + exit 1 +} + +: ${CATSITD_PIPE:='%%RUNDIR%%/catsitd.pipe'} + +while getopts 'c:' opt; do + case "${opt}" in + (c) CATSITD_PIPE=$OPTARG;; + (?) exit 1;; + esac +done +shift $((OPTIND - 1)) + +if ! [ -p "${CATSITD_PIPE}" ]; then + die "${CATSITD_PIPE} is not a named pipe" +fi +if ! [ -w "${CATSITD_PIPE}" ]; then + die "${CATSITD_PIPE} is not writable" +fi + +[ $# -lt 1 ] && die 'action required' +[ $# -lt 2 ] && die 'service name required' + +action=$(echo "${1}" | tr 'A-Z' 'a-z') +for valid in start stop restart status drop $(kill -l | tr 'A-Z' 'a-z'); do + [ "${action}" = "${valid}" ] && break +done +if [ "${action}" != "${valid}" ]; then + die "${action} is not a valid action or signal" +fi + +echo "$@" > "${CATSITD_PIPE}" |