Просмотр исходного кода

base-files,procd: add generic service status

Adds a default status action for init.d scripts.

procd "service status" will return:

 0) for loaded services (even if disabled by conf or dead)
 3) for inactive services
 4) when filtering a non-existing instance

Signed-off-by: Luiz Angelo Daros de Luca <[email protected]>
[rebased, cleaned up]
Signed-off-by: Petr Štetiar <[email protected]>
Luiz Angelo Daros de Luca 7 лет назад
Родитель
Сommit
7519a36774
2 измененных файлов с 35 добавлено и 1 удалено
  1. 10 1
      package/base-files/files/etc/rc.common
  2. 25 0
      package/system/procd/files/procd.sh

+ 10 - 1
package/base-files/files/etc/rc.common

@@ -105,9 +105,10 @@ ${INIT_TRACE:+set -x}
 . "$initscript"
 
 [ -n "$USE_PROCD" ] && {
-	EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
+	EXTRA_COMMANDS="${EXTRA_COMMANDS} running status trace"
 	EXTRA_HELP="\
 	running	Check if service is running
+	status	Service status
 	"
 
 	. $IPKG_INSTROOT/lib/functions/procd.sh
@@ -153,6 +154,14 @@ ${INIT_TRACE:+set -x}
 	running() {
 		service_running "$@"
 	}
+
+	status() {
+		if eval "type status_service" 2>/dev/null >/dev/null; then
+			status_service "$@"
+		else
+			_procd_status "$(basename ${basescript:-$initscript})" "$1"
+		fi
+	}
 }
 
 ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"

+ 25 - 0
package/system/procd/files/procd.sh

@@ -443,6 +443,31 @@ _procd_send_signal() {
 	_procd_ubus_call signal
 }
 
+_procd_status() {
+	local service="$1"
+	local instance="$2"
+	local data
+
+	json_init
+	[ -n "$service" ] && json_add_string name "$service"
+
+	data=$(_procd_ubus_call list | jsonfilter -e '@["'"$service"'"]')
+	[ -z "$data" ] && { echo "inactive"; return 3; }
+
+	data=$(echo "$data" | jsonfilter -e '$.instances')
+	if [ -z "$data" ]; then
+		[ -z "$instance" ] && { echo "active with no instances"; return 0; }
+		data="[]"
+	fi
+
+	[ -n "$instance" ] && instance="\"$instance\"" || instance='*'
+	if [ -z "$(echo "$data" | jsonfilter -e '$['"$instance"']')" ]; then
+		echo "unknown instance $instance"; return 4
+	else
+		echo "running"; return 0
+	fi
+}
+
 procd_open_data() {
 	local name="$1"
 	json_set_namespace procd __procd_old_cb