svc (1904B)
1 #!/bin/sh 2 # 3 # See LICENSE file for license details. 4 # 5 6 # "Quiet" command 7 8 # $?: 9 # 0: OK 10 # 1: Redundant 11 # 2: Error 12 13 BASEDIR="/bin/svc.d" 14 BASENAME="${0##*/}" 15 16 usage() { 17 printf "usage: %s [-acdeklrs] [service]\n" "$BASENAME" >&2 18 exit 2 19 } 20 21 [ -d "$BASEDIR" ] || mkdir -p "$BASEDIR" 22 cd $BASEDIR 23 24 if [ "$(id -u)" -ne 0 ]; then 25 printf "You must be root to run ${0##*/}\n" >&2 26 exit 2 27 fi 28 29 if [ $# -lt 1 ]; 30 then 31 usage 32 exit 2 33 fi 34 35 runservice() { 36 service="$1" 37 dir="$2" 38 cmd="$3" 39 40 if [ $(stat -L -t "${dir}/${service}" | cut -d' ' -f 2) -eq 0 ]; 41 then 42 "./bare.sh" "${service}" "${cmd}" 43 return $? 44 else 45 "${dir}/${service}" "${cmd}" 46 return $? 47 fi 48 } 49 50 doservice() { 51 cmd="$1" 52 service="$2" 53 54 if [ -z "${service}" ]; 55 then 56 for s in $(find run -type l); 57 do 58 runservice "${s##*/}" run "${cmd}" 59 done 60 else 61 if [ -x "avail/${service}" ]; 62 then 63 runservice "${service}" avail "${cmd}" 64 exit $? 65 else 66 printf "%s: '%s' is not available or executable.\n" \ 67 "${BASENAME}" "${service}" >&2 68 exit 2 69 fi 70 fi 71 } 72 73 case "$1" in 74 -ad) if [ $# -lt 2 ]; then 75 printf "%s: No service given\n" "${BASENAME}" >&2 76 exit 2 77 elif [ ! -L "run/$2" ]; then 78 exit 2 79 fi;; 80 -a) if [ $# -gt 1 ] && [ -e "avail/$2" ]; 81 then 82 ln -sf "../avail/$2" "run/$2" 83 else 84 cd run 85 ls . 86 fi;; 87 -c) [ -d "$BASEDIR" ] || mkdir -p "$BASEDIR" 88 [ -d "$BASEDIR/avail" ] || mkdir -p "$BASEDIR/avail" 89 [ -d "$BASEDIR/default" ] || mkdir -p "$BASEDIR/default" 90 [ -d "$BASEDIR/run" ] || mkdir -p "$BASEDIR/run";; 91 -d) if [ $# -gt 1 ] && [ -L "run/$2" ]; 92 then 93 rm -f "run/$2" 94 else 95 printf "%s: No service given or service is not marked "\ 96 "as to run.\n" "$BASENAME" >&2 97 exit 2 98 fi;; 99 -e) if [ $# -lt 2 ]; then 100 printf "%s: No service given\n" "${BASENAME}" >&2 101 exit 2 102 else 103 doservice "$1" "$2" 104 fi;; 105 -k|-s|-r) 106 doservice "$1" "$2";; 107 -l) cd avail 108 ls .;; 109 *) usage 110 exit 2;; 111 esac