base-files: use restart if no reload hook for service
[librecmc/librecmc.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         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 service does not implement reload)
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                         restart
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 "$@"