svc

Управљање сервисима
git clone https://git.sr.ht/~strahinja/svc
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

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