#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2022 Patrick Spek
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# 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
local rc
case "${BASHTARD_PLATFORM[key]}" in
freebsd)
rc="$(printf '%s_enable="YES"' "$service")"
if [[ ! -f "/etc/rc.conf.d/$service" ]] || ! grep -Fqx "$rc" "/etc/rc.conf.d/$service"
then
printf "%s\n" "$rc" >> "/etc/rc.conf.d/$service"
fi
return 0
;;
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
$@
}