aboutsummaryrefslogtreecommitdiff
path: root/lib/util/svc.bash
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util/svc.bash')
-rw-r--r--lib/util/svc.bash138
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
+ $@
+}