base-files: add service_stopped as a post stop hook
[openwrt/staging/mkresin.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 return 0
99 }
100
101 ${INIT_TRACE:+set -x}
102
103 . "$initscript"
104
105 [ -n "$USE_PROCD" ] && {
106 EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
107
108 . $IPKG_INSTROOT/lib/functions/procd.sh
109 basescript=$(readlink "$initscript")
110 rc_procd() {
111 local method="set"
112 [ -n "$2" ] && method="add"
113 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
114 "$@"
115 procd_close_service "$method"
116 }
117
118 start() {
119 rc_procd start_service "$@"
120 if eval "type service_started" 2>/dev/null >/dev/null; then
121 service_started
122 fi
123 }
124
125 trace() {
126 TRACE_SYSCALLS=1
127 start "$@"
128 }
129
130 stop() {
131 procd_lock
132 stop_service "$@"
133 procd_kill "$(basename ${basescript:-$initscript})" "$1"
134 if eval "type service_stopped" 2>/dev/null >/dev/null; then
135 service_stopped
136 fi
137 }
138
139 reload() {
140 if eval "type reload_service" 2>/dev/null >/dev/null; then
141 procd_lock
142 reload_service "$@"
143 else
144 start
145 fi
146 }
147
148 running() {
149 service_running "$@"
150 }
151 }
152
153 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
154 list_contains ALL_COMMANDS "$action" || action=help
155 $action "$@"