base-files: add enabled commands to service rc.common
[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         enabled Check if service is started on boot
77 $EXTRA_HELP
78 EOF
79 }
80
81 # for procd
82 start_service() {
83         return 0
84 }
85
86 stop_service() {
87         return 0
88 }
89
90 service_triggers() {
91         return 0
92 }
93
94 service_data() {
95         return 0
96 }
97
98 service_running() {
99         local service="${1:-$(basename $initscript)}"
100         local instance="${2:-*}"
101         procd_running "$service" "$instance" "$@"
102 }
103
104 ${INIT_TRACE:+set -x}
105
106 . "$initscript"
107
108 [ -n "$USE_PROCD" ] && {
109         EXTRA_COMMANDS="${EXTRA_COMMANDS} running status trace"
110         EXTRA_HELP="\
111         running Check if service is running
112         status  Service status
113 ${EXTRA_HELP}"
114
115         . $IPKG_INSTROOT/lib/functions/procd.sh
116         basescript=$(readlink "$initscript")
117         rc_procd() {
118                 local method="set"
119                 [ -n "$2" ] && method="add"
120                 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
121                 "$@"
122                 procd_close_service "$method"
123         }
124
125         start() {
126                 rc_procd start_service "$@"
127                 if eval "type service_started" 2>/dev/null >/dev/null; then
128                         service_started
129                 fi
130         }
131
132         trace() {
133                 TRACE_SYSCALLS=1
134                 start "$@"
135         }
136
137         stop() {
138                 procd_lock
139                 stop_service "$@"
140                 procd_kill "$(basename ${basescript:-$initscript})" "$1"
141                 if eval "type service_stopped" 2>/dev/null >/dev/null; then
142                         service_stopped
143                 fi
144         }
145
146         reload() {
147                 if eval "type reload_service" 2>/dev/null >/dev/null; then
148                         procd_lock
149                         reload_service "$@"
150                 else
151                         start
152                 fi
153         }
154
155         running() {
156                 service_running "$@"
157         }
158
159         status() {
160                 if eval "type status_service" 2>/dev/null >/dev/null; then
161                         status_service "$@"
162                 else
163                         _procd_status "$(basename ${basescript:-$initscript})" "$1"
164                 fi
165         }
166 }
167
168 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
169 list_contains ALL_COMMANDS "$action" || action=help
170 $action "$@"