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