dbe26ec3bd0c6d239c653669af7970c662e84d04
[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         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 status trace"
109         EXTRA_HELP="\
110         running Check if service is running
111         status  Service status
112 ${EXTRA_HELP}"
113
114         . $IPKG_INSTROOT/lib/functions/procd.sh
115         basescript=$(readlink "$initscript")
116         rc_procd() {
117                 local method="set"
118                 [ -n "$2" ] && method="add"
119                 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
120                 "$@"
121                 procd_close_service "$method"
122         }
123
124         start() {
125                 rc_procd start_service "$@"
126                 if eval "type service_started" 2>/dev/null >/dev/null; then
127                         service_started
128                 fi
129         }
130
131         trace() {
132                 TRACE_SYSCALLS=1
133                 start "$@"
134         }
135
136         stop() {
137                 procd_lock
138                 stop_service "$@"
139                 procd_kill "$(basename ${basescript:-$initscript})" "$1"
140                 if eval "type service_stopped" 2>/dev/null >/dev/null; then
141                         service_stopped
142                 fi
143         }
144
145         reload() {
146                 if eval "type reload_service" 2>/dev/null >/dev/null; then
147                         procd_lock
148                         reload_service "$@"
149                 else
150                         start
151                 fi
152         }
153
154         running() {
155                 service_running "$@"
156         }
157
158         status() {
159                 if eval "type status_service" 2>/dev/null >/dev/null; then
160                         status_service "$@"
161                 else
162                         _procd_status "$(basename ${basescript:-$initscript})" "$1"
163                 fi
164         }
165 }
166
167 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
168 list_contains ALL_COMMANDS "$action" || action=help
169 $action "$@"