base-files: implement generic service_running
[openwrt/staging/lynxis.git] / package / base-files / files / etc / rc.common
1 #!/bin/sh
2 # Copyright (C) 2006-2012 OpenWrt.org
3
4 . $IPKG_INSTROOT/lib/functions.sh
5 . $IPKG_INSTROOT/lib/functions/service.sh
6
7 initscript=$1
8 action=${2:-help}
9 shift 2
10
11 start() {
12 return 0
13 }
14
15 stop() {
16 return 0
17 }
18
19 reload() {
20 restart
21 }
22
23 restart() {
24 trap '' TERM
25 stop "$@"
26 trap - TERM
27 start "$@"
28 }
29
30 boot() {
31 start "$@"
32 }
33
34 shutdown() {
35 stop
36 }
37
38 disable() {
39 name="$(basename "${initscript}")"
40 rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
41 rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
42 }
43
44 enable() {
45 err=1
46 name="$(basename "${initscript}")"
47 [ "$START" ] && \
48 ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" && \
49 err=0
50 [ "$STOP" ] && \
51 ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}" && \
52 err=0
53 return $err
54 }
55
56 enabled() {
57 name="$(basename "${initscript}")"
58 [ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
59 }
60
61 depends() {
62 return 0
63 }
64
65 help() {
66 cat <<EOF
67 Syntax: $initscript [command]
68
69 Available commands:
70 start Start the service
71 stop Stop the service
72 restart Restart the service
73 reload Reload configuration files (or restart if service does not implement reload)
74 enable Enable service autostart
75 disable Disable service autostart
76 $EXTRA_HELP
77 EOF
78 }
79
80 # for procd
81 start_service() {
82 return 0
83 }
84
85 stop_service() {
86 return 0
87 }
88
89 service_triggers() {
90 return 0
91 }
92
93 service_data() {
94 return 0
95 }
96
97 service_running() {
98 local service="${1:-$(basename $initscript)}"
99 local instance="${2:-*}"
100 procd_running "$service" "$instance" "$@"
101 }
102
103 ${INIT_TRACE:+set -x}
104
105 . "$initscript"
106
107 [ -n "$USE_PROCD" ] && {
108 EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
109 EXTRA_HELP="\
110 running Check if service is running
111 "
112
113 . $IPKG_INSTROOT/lib/functions/procd.sh
114 basescript=$(readlink "$initscript")
115 rc_procd() {
116 local method="set"
117 [ -n "$2" ] && method="add"
118 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
119 "$@"
120 procd_close_service "$method"
121 }
122
123 start() {
124 rc_procd start_service "$@"
125 if eval "type service_started" 2>/dev/null >/dev/null; then
126 service_started
127 fi
128 }
129
130 trace() {
131 TRACE_SYSCALLS=1
132 start "$@"
133 }
134
135 stop() {
136 procd_lock
137 stop_service "$@"
138 procd_kill "$(basename ${basescript:-$initscript})" "$1"
139 if eval "type service_stopped" 2>/dev/null >/dev/null; then
140 service_stopped
141 fi
142 }
143
144 reload() {
145 if eval "type reload_service" 2>/dev/null >/dev/null; then
146 procd_lock
147 reload_service "$@"
148 else
149 start
150 fi
151 }
152
153 running() {
154 service_running "$@"
155 }
156 }
157
158 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
159 list_contains ALL_COMMANDS "$action" || action=help
160 $action "$@"