# $Id$ # adds systemd units to runlevels and starts them # mstartunit service {/path/to/service_exec} mstartunit() { local service="$1" local service_exec="$2" local opts local chroot # only run if systemd was found if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]] then echo "systemd not found, not adding unit ${service} to runlevels!" return fi # don't run if feature !autosvc was set if mqueryfeature "!autosvc" then echo "!autosvc detected; auto management of services disabled." return fi if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]] then # symlinks root path too, not exactly what we want #opts="--root ${MROOT}" if [ -x $(type -P systemd-nspawn) ] then chroot="$(type -P systemd-nspawn)" else chroot="chroot" fi fi if [[ -z ${service_exec} ]] then case ${service} in *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;; *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;; *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;; *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;; *) service_exec="$(which ${service} 2> /dev/null)" ;; esac fi # add service to default runlevels echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} adding unit ${service} to default runlevels ..." # reload daemon to honor changed unit files if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then systemctl ${opts} daemon-reload fi ${chroot} systemctl ${opts} enable ${service} # do not start services on bootstrap or MROOT!=/ if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} starting unit ${service} ..." # start or restart the service # dont use try-restart, works only with active services! systemctl restart ${service} fi } # removes systemd units from runlevels and stops them # mstopunit service {/path/to/service_exec} mstopunit() { local service="$1" local service_exec="$2" local opts # only run if systemd was found if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]] then echo "systemd not found, not removing unit ${service} from runlevels!" return fi # don't run if feature !autosvc was set if mqueryfeature "!autosvc" then echo "!autosvc detected; auto management of services disabled." return fi if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]] then opts="--root ${MROOT}" fi if [[ -z ${service_exec} ]] then case ${service} in *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;; *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;; *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;; *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;; *) service_exec="$(which ${service} 2> /dev/null)" ;; esac elif [[ x$(basename ${service_exec}) = x${service_exec} ]] then # expand full path service_exec="$(which ${service_exec})" fi # only stop the service if ${service_exec} does not exist [[ -x ${MROOT}/${service_exec} ]] && return # del services from runlevel regardless if they exist or not echo -e " ${COLBLUE}[${COLRED}-${COLBLUE}]${COLDEFAULT} removing unit ${service} from default runlevels ..." # reload daemon to honor changed unit files systemctl ${opts} daemon-reload systemctl ${opts} disable ${service} # do not stop services on bootstrap or MROOT!=/ if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} stopping unit ${service} ..." systemctl stop ${service} # try harder if [[ -n $(pidof ${service_exec}) ]] then killall -15 ${service_exec} &> /dev/null sleep 1 killall -9 ${service_exec} &> /dev/null fi fi } # reloads a systemd unit if already running # mreloadunit service {/path/to/service_exec} mreloadunit() { local service="$1" local service_exec="$2" local opts # only run if systemd was found if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]] then echo "systemd not found, not removing unit ${service} from runlevels!" return fi # don't run if feature !autosvc was set if mqueryfeature "!autosvc" then echo "!autosvc detected; auto management of services disabled." return fi if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]] then opts="--root ${MROOT}" fi if [[ -z ${service_exec} ]] then case ${service} in *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;; *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;; *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;; *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;; *) service_exec="$(which ${service} 2> /dev/null)" ;; esac fi # reload daemon to honor changed unit files systemctl ${opts} daemon-reload # do not stop services on bootstrap or MROOT!=/ if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then # only reload the service if running systemctl reload-or-try-restart ${service} fi }