blob: abf72ea3372fe80b920d0c9a03b3e7d30b1a5ff9 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh
2# Copyright (C) 2006-2012 OpenWrt.org
3
4. $IPKG_INSTROOT/lib/functions.sh
5. $IPKG_INSTROOT/lib/functions/service.sh
6
7initscript=$1
8action=${2:-help}
9shift 2
10
11start() {
12 return 0
13}
14
15stop() {
16 return 0
17}
18
19reload() {
20 restart
21}
22
23restart() {
24 trap '' TERM
25 stop "$@"
26 trap - TERM
27 start "$@"
28}
29
30boot() {
31 start "$@"
32}
33
34shutdown() {
35 stop
36}
37
38disable() {
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
44enable() {
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
56enabled() {
57 name="$(basename "${initscript}")"
58 name="${name##[SK][0-9][0-9]}"
59 {
60 [ -z "${START:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/S${START}$name" ]
61 } && {
62 [ -z "${STOP:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/K${STOP}$name" ]
63 }
64}
65
66depends() {
67 return 0
68}
69
70ALL_HELP=""
71ALL_COMMANDS="boot shutdown depends"
72extra_command() {
73 local cmd="$1"
74 local help="$2"
75
76 local extra="$(printf "%-16s%s" "${cmd}" "${help}")"
77 ALL_HELP="${ALL_HELP}\t${extra}\n"
78 ALL_COMMANDS="${ALL_COMMANDS} ${cmd}"
79}
80
81help() {
82 cat <<EOF
83Syntax: $initscript [command]
84
85Available commands:
86EOF
87 echo -e "$ALL_HELP"
88}
89
90# for procd
91start_service() {
92 return 0
93}
94
95stop_service() {
96 return 0
97}
98
99service_triggers() {
100 return 0
101}
102
103service_running() {
104 local instance="${1:-*}"
105
106 procd_running "$(basename $initscript)" "$instance"
107}
108
109${INIT_TRACE:+set -x}
110
111extra_command "start" "Start the service"
112extra_command "stop" "Stop the service"
113extra_command "restart" "Restart the service"
114extra_command "reload" "Reload configuration files (or restart if service does not implement reload)"
115extra_command "enable" "Enable service autostart"
116extra_command "disable" "Disable service autostart"
117extra_command "enabled" "Check if service is started on boot"
118
119. "$initscript"
120
121[ -n "$USE_PROCD" ] && {
122 extra_command "running" "Check if service is running"
123 extra_command "status" "Service status"
124 extra_command "trace" "Start with syscall trace"
125 extra_command "info" "Dump procd service info"
126
127 . $IPKG_INSTROOT/lib/functions/procd.sh
128 basescript=$(readlink "$initscript")
129 rc_procd() {
130 local method="set"
131 [ -n "$2" ] && method="add"
132 procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
133 "$@"
134 procd_close_service "$method"
135 }
136
137 start() {
138 rc_procd start_service "$@"
139 if eval "type service_started" 2>/dev/null >/dev/null; then
140 service_started
141 fi
142 }
143
144 trace() {
145 TRACE_SYSCALLS=1
146 start "$@"
147 }
148
149 info() {
150 json_init
151 json_add_string name "$(basename ${basescript:-$initscript})"
152 json_add_boolean verbose "1"
153 _procd_ubus_call list
154 }
155
156 stop() {
157 procd_lock
158 stop_service "$@"
159 procd_kill "$(basename ${basescript:-$initscript})" "$1"
160 if eval "type service_stopped" 2>/dev/null >/dev/null; then
161 service_stopped
162 fi
163 }
164
165 reload() {
166 if eval "type reload_service" 2>/dev/null >/dev/null; then
167 procd_lock
168 reload_service "$@"
169 else
170 start
171 fi
172 }
173
174 running() {
175 service_running "$@"
176 }
177
178 status() {
179 if eval "type status_service" 2>/dev/null >/dev/null; then
180 status_service "$@"
181 else
182 _procd_status "$(basename ${basescript:-$initscript})" "$1"
183 fi
184 }
185}
186
187ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
188ALL_HELP="${ALL_HELP}${EXTRA_HELP}"
189list_contains ALL_COMMANDS "$action" || action=help
190$action "$@"