cc7316d1e9
There are services that have only STOP value set. They are executed only on shutdown and it is common to use them for system cleanup. There is one such service shipped directly with base-files, it is 'umount'. Those work the same way as those with START but enabled does not report them as enabled although it should have as they can be enabled and disabled as any other service. This also changes check from check for executable to check for symbolic link. The implementation depends on those being links to service file and it is much cleaner and direct to check for them being links. Signed-off-by: Karel Kočí <karel.koci@nic.cz>
187 lines
3.3 KiB
Bash
Executable File
187 lines
3.3 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}")"
|
|
name="${name##[SK][0-9][0-9]}"
|
|
{
|
|
[ -z "${START:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/S${START}$name" ]
|
|
} && {
|
|
[ -z "${STOP:-}" ] || [ -L "$IPKG_INSTROOT/etc/rc.d/K${STOP}$name" ]
|
|
}
|
|
}
|
|
|
|
depends() {
|
|
return 0
|
|
}
|
|
|
|
ALL_HELP=""
|
|
ALL_COMMANDS="boot shutdown depends"
|
|
extra_command() {
|
|
local cmd="$1"
|
|
local help="$2"
|
|
|
|
local extra="$(printf "%-16s%s" "${cmd}" "${help}")"
|
|
ALL_HELP="${ALL_HELP}\t${extra}\n"
|
|
ALL_COMMANDS="${ALL_COMMANDS} ${cmd}"
|
|
}
|
|
|
|
help() {
|
|
cat <<EOF
|
|
Syntax: $initscript [command]
|
|
|
|
Available commands:
|
|
EOF
|
|
echo -e "$ALL_HELP"
|
|
}
|
|
|
|
# for procd
|
|
start_service() {
|
|
return 0
|
|
}
|
|
|
|
stop_service() {
|
|
return 0
|
|
}
|
|
|
|
service_triggers() {
|
|
return 0
|
|
}
|
|
|
|
service_data() {
|
|
return 0
|
|
}
|
|
|
|
service_running() {
|
|
local service="${1:-$(basename $initscript)}"
|
|
local instance="${2:-*}"
|
|
procd_running "$service" "$instance" "$@"
|
|
}
|
|
|
|
${INIT_TRACE:+set -x}
|
|
|
|
extra_command "start" "Start the service"
|
|
extra_command "stop" "Stop the service"
|
|
extra_command "restart" "Restart the service"
|
|
extra_command "reload" "Reload configuration files (or restart if service does not implement reload)"
|
|
extra_command "enable" "Enable service autostart"
|
|
extra_command "disable" "Disable service autostart"
|
|
extra_command "enabled" "Check if service is started on boot"
|
|
|
|
. "$initscript"
|
|
|
|
[ -n "$USE_PROCD" ] && {
|
|
extra_command "running" "Check if service is running"
|
|
extra_command "status" "Service status"
|
|
extra_command "trace" "Start with syscall 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 "$@"
|
|
}
|
|
|
|
status() {
|
|
if eval "type status_service" 2>/dev/null >/dev/null; then
|
|
status_service "$@"
|
|
else
|
|
_procd_status "$(basename ${basescript:-$initscript})" "$1"
|
|
fi
|
|
}
|
|
}
|
|
|
|
ALL_COMMANDS="${ALL_COMMANDS} ${EXTRA_COMMANDS}"
|
|
ALL_HELP="${ALL_HELP}${EXTRA_HELP}"
|
|
list_contains ALL_COMMANDS "$action" || action=help
|
|
$action "$@"
|