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