base-files: fix unkillable processes after restart
[openwrt/staging/chunkeey.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 name="$(basename "${initscript}")"
46 disable
47 [ -n "$START" -o -n "$STOP" ] || {
48 echo "/etc/init.d/$name does not have a START or STOP value"
49 return 1
50 }
51 [ "$START" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}"
52 [ "$STOP" ] && ln -s "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}"
53 }
54
55 enabled() {
56 name="$(basename "${initscript}")"
57 [ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
58 }
59
60 depends() {
61 return 0
62 }
63
64 help() {
65 cat <<EOF
66 Syntax: $initscript [command]
67
68 Available commands:
69 start Start the service
70 stop Stop the service
71 restart Restart the service
72 reload Reload configuration files (or restart if service does not implement reload)
73 enable Enable service autostart
74 disable Disable service autostart
75 $EXTRA_HELP
76 EOF
77 }
78
79 # for procd
80 start_service() {
81 return 0
82 }
83
84 stop_service() {
85 return 0
86 }
87
88 service_triggers() {
89 return 0
90 }
91
92 service_running() {
93 return 0
94 }
95
96 ${INIT_TRACE:+set -x}
97
98 . "$initscript"
99
100 [ -n "$USE_PROCD" ] && {
101 EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
102
103 . $IPKG_INSTROOT/lib/functions/procd.sh
104 basescript=$(readlink "$initscript")
105 rc_procd() {
106 local method="set"
107 [ -n "$2" ] && method="add"
108 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
109 "$@"
110 procd_close_service "$method"
111 }
112
113 start() {
114 rc_procd start_service "$@"
115 if eval "type service_started" 2>/dev/null >/dev/null; then
116 service_started
117 fi
118 }
119
120 trace() {
121 TRACE_SYSCALLS=1
122 start "$@"
123 }
124
125 stop() {
126 stop_service "$@"
127 procd_kill "$(basename ${basescript:-$initscript})" "$1"
128 }
129
130 reload() {
131 if eval "type reload_service" 2>/dev/null >/dev/null; then
132 reload_service "$@"
133 else
134 start
135 fi
136 }
137
138 running() {
139 service_running "$@"
140 }
141 }
142
143 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
144 list_contains ALL_COMMANDS "$action" || action=help
145 $action "$@"