mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	Purpose of these changes is to introduce a hook for post service shutdown in a similar fashion to the existing hook service_started. I found it to be useful to specify a hook that is called once the service has been stopped and not before the service is stopped like the stop_service hook does. The concrete use case I have for this is that I'm running a binary that takes over the hardware watchdog timer. Said binary unfortunately can not use ubus directly to tell procd to hand over the watchdog timer so this has to be done in the service file for the binary in question. In order to support a clean handover of the watchdog timer back to procd, the service init script has to dispatch the ubus invocation once the binary in question has been stopped. Signed-off-by: Arthur Skowronek <ags@digineo.de> Signed-off-by: Petr Štetiar <ynezz@true.cz> [added commit message, use the same form as other hooks]
		
			
				
	
	
		
			156 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # Copyright (C) 2006-2012 OpenWrt.org
 | |
| 
 | |
| . $IPKG_INSTROOT/lib/functions.sh
 | |
| . $IPKG_INSTROOT/lib/functions/service.sh
 | |
| 
 | |
| initscript=$1
 | |
| action=${2:-help}
 | |
| shift 2
 | |
| 
 | |
| start() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| stop() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| reload() {
 | |
| 	restart
 | |
| }
 | |
| 
 | |
| restart() {
 | |
| 	trap '' TERM
 | |
| 	stop "$@"
 | |
| 	trap - TERM
 | |
| 	start "$@"
 | |
| }
 | |
| 
 | |
| boot() {
 | |
| 	start "$@"
 | |
| }
 | |
| 
 | |
| shutdown() {
 | |
| 	stop
 | |
| }
 | |
| 
 | |
| disable() {
 | |
| 	name="$(basename "${initscript}")"
 | |
| 	rm -f "$IPKG_INSTROOT"/etc/rc.d/S??$name
 | |
| 	rm -f "$IPKG_INSTROOT"/etc/rc.d/K??$name
 | |
| }
 | |
| 
 | |
| enable() {
 | |
| 	err=1
 | |
| 	name="$(basename "${initscript}")"
 | |
| 	[ "$START" ] && \
 | |
| 		ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" && \
 | |
| 		err=0
 | |
| 	[ "$STOP" ] && \
 | |
| 		ln -sf "../init.d/$name" "$IPKG_INSTROOT/etc/rc.d/K${STOP}${name##K[0-9][0-9]}" && \
 | |
| 		err=0
 | |
| 	return $err
 | |
| }
 | |
| 
 | |
| enabled() {
 | |
| 	name="$(basename "${initscript}")"
 | |
| 	[ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
 | |
| }
 | |
| 
 | |
| depends() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| help() {
 | |
| 	cat <<EOF
 | |
| Syntax: $initscript [command]
 | |
| 
 | |
| Available commands:
 | |
| 	start	Start the service
 | |
| 	stop	Stop the service
 | |
| 	restart	Restart the service
 | |
| 	reload	Reload configuration files (or restart if service does not implement reload)
 | |
| 	enable	Enable service autostart
 | |
| 	disable	Disable service autostart
 | |
| $EXTRA_HELP
 | |
| EOF
 | |
| }
 | |
| 
 | |
| # for procd
 | |
| start_service() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| stop_service() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| service_triggers() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| service_data() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| service_running() {
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| ${INIT_TRACE:+set -x}
 | |
| 
 | |
| . "$initscript"
 | |
| 
 | |
| [ -n "$USE_PROCD" ] && {
 | |
| 	EXTRA_COMMANDS="${EXTRA_COMMANDS} running trace"
 | |
| 
 | |
| 	. $IPKG_INSTROOT/lib/functions/procd.sh
 | |
| 	basescript=$(readlink "$initscript")
 | |
| 	rc_procd() {
 | |
| 		local method="set"
 | |
| 		[ -n "$2" ] && method="add"
 | |
| 		procd_open_service "$(basename ${basescript:-$initscript})" "$initscript"
 | |
| 		"$@"
 | |
| 		procd_close_service "$method"
 | |
| 	}
 | |
| 
 | |
| 	start() {
 | |
| 		rc_procd start_service "$@"
 | |
| 		if eval "type service_started" 2>/dev/null >/dev/null; then
 | |
| 			service_started
 | |
| 		fi
 | |
| 	}
 | |
| 
 | |
| 	trace() {
 | |
| 		TRACE_SYSCALLS=1
 | |
| 		start "$@"
 | |
| 	}
 | |
| 
 | |
| 	stop() {
 | |
| 		procd_lock
 | |
| 		stop_service "$@"
 | |
| 		procd_kill "$(basename ${basescript:-$initscript})" "$1"
 | |
| 		if eval "type service_stopped" 2>/dev/null >/dev/null; then
 | |
| 			service_stopped
 | |
| 		fi
 | |
| 	}
 | |
| 
 | |
| 	reload() {
 | |
| 		if eval "type reload_service" 2>/dev/null >/dev/null; then
 | |
| 			procd_lock
 | |
| 			reload_service "$@"
 | |
| 		else
 | |
| 			start
 | |
| 		fi
 | |
| 	}
 | |
| 
 | |
| 	running() {
 | |
| 		service_running "$@"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ALL_COMMANDS="start stop reload restart boot shutdown enable disable enabled depends ${EXTRA_COMMANDS}"
 | |
| list_contains ALL_COMMANDS "$action" || action=help
 | |
| $action "$@"
 |