#!/usr/bin/env bash ## CHECK DEPS if ! type readlink >/dev/null 2>&1; then printf "readlink command not found.\n" exit 1 fi ## UTIL FUNCTIONS reverse_array () { unset _b for a in $@; do [ -n "$_b" ] && _b="$a $_b" || _b="$a" done echo $_b } ## FIND INIT INIT="$(readlink $(type init) )" if `type s6-rc >/dev/null`; then S6=y else unset S6 fi if [ "$INIT" = "openrc-init" ]; then OPENRC=y unset RUNIT DINIT fi ## CHECK PRIVS if [ "$(whoami)" != "root" ]; then ROOTCMD="sudo" fi ## SERVICE FUNCTIONS start_service () { if [ -n "$S6" ]; then $ROOTCMD s6-rc -u change $1 fi if [ -n "$OPENRC" ]; then $ROOTCMD rc-service $1 start fi } stop_service () { if [ -n "$S6" ]; then $ROOTCMD s6-rc -d change $1 fi if [ -n "$OPENRC" ]; then $ROOTCMD rc-service $1 stop fi } enable_service () { if [ -n "$S6" ]; then $ROOTCMD s6-service add default $1 fi if [ -n "$OPENRC" ]; then $ROOTCMD rc-update add $1 default fi } disable_service () { if [ -n "$S6" ]; then $ROOTCMD s6-service delete default $1 fi if [ -n "$OPENRC" ]; then $ROOTCMD rc-update del $1 default fi } ## MAIN LOOP case "$1" in "start") for i in "${@:2}"; do printf "start $i\n" start_service $i done ;; "stop") for i in "${@:2}"; do printf "stop $i\n" stop_service $i done ;; "enable") for i in "${@:2}"; do printf "enable $i\n" enable_service $i done ;; "disable") for i in "${@:2}"; do printf "disable $i\n" disable_service $i done ;; "restart") for i in `reverse_array ${@:2}`; do printf "stop $i\n" stop_service $i done for i in ${@:2}; do printf "start $i\n" start_service $i done ;; esac