diff options
Diffstat (limited to 'lib/util/svc.bash')
-rw-r--r-- | lib/util/svc.bash | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/lib/util/svc.bash b/lib/util/svc.bash new file mode 100644 index 0000000..403615f --- /dev/null +++ b/lib/util/svc.bash @@ -0,0 +1,138 @@ +#!/usr/bin/env bash + +# OS independent service management. +svc() { + local system="bashtard/svc" + + local service + local action + + action=$1 ; shift + service="$(config "svc.$1")" ; shift + + if [[ -z $service ]] + then + crit "$system" "No service name for $service" + return 1 + fi + + if [[ "$(type -t "svc_$action")" != "function" ]] + then + crit "$system" "Invalid service manager action $action" + return 1 + fi + + "svc_$action" "$service" +} + +svc_disable() { + local system="bashtard/svc/disable" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + linux-gentoo) set -- /sbin/rc-update del "$service" ;; + linux-*) set -- systemctl disable "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} + +svc_enable() { + local system="bashtard/svc/enable" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + linux-gentoo) set -- /sbin/rc-update add "$service" ;; + linux-*) set -- systemctl enable "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} + +svc_reload() { + local system="bashtard/svc/reload" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + freebsd) set -- service "$service" reload ;; + linux-gentoo) set -- /sbin/rc-service "$service" reload ;; + linux-*) set -- systemctl reload "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} + +svc_restart() { + local system="bashtard/svc/restart" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + freebsd) set -- service "$service" restart ;; + linux-gentoo) set -- /sbin/rc-service "$service" restart ;; + linux-*) set -- systemctl restart "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} + +svc_start() { + local system="bashtard/svc/start" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + freebsd) set -- service "$service" start ;; + linux-gentoo) set -- /sbin/rc-service "$service" start ;; + linux-*) set -- systemctl start "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} + +svc_stop() { + local system="bashtard/svc/stop" + + local service=$1 + + case "${BASHTARD_PLATFORM[key]}" in + freebsd) set -- service "$service" stop ;; + linux-gentoo) set -- /sbin/rc-service "$service" stop ;; + linux-*) set -- systemctl stop "$service" ;; + *) + crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + return 1 + esac + + notice "$system" "$*" + # shellcheck disable=SC2068 + $@ +} |