#! /usr/bin/env bash # # wmstartup service common functions # Copyright (C) 2018 salt # # Distributed under terms of the MIT license. # service_name="unnamed_service" service_process="true" service_kill_on_reload="true" service_flags="" # Basic logging service. Do not override unless necessary function svc_log() { if [ -z ${1+x} ]; then return 1; fi out=1 if ! [ -z ${2+x} ]; then out="$2"; fi col_reset="\e[0m" col_svcname="\e[94m" col_message="\e[39m" if ! [ "$out" -eq "1" ]; then col_message="\e[31m"; fi if [ "$out" -eq "0" ]; then out=1 col_message="\e[37m" fi dtf_log "${col_svcname}${service_name}${col_reset}: ${col_message}${1}${col_reset}" >&${out} } # Basic pre-start checks. Stick extra checks in prestart-extra function prestart() { if isup; then svc_log "Already running" 0 return 1 fi if ! which $service_process > /dev/null 2>&1; then svc_log "Could not find associated binary: \"${service_process}\"" 2 return 1 fi return 0 } # Template function. If it fails, the service will not be started function prestart-extra() { return 0 } # Basic start function. Override if you have special startup functionality function start() { svc_log "Starting" $service_process $service_flags > /dev/null 2>&1 & return 0 } # Template function. Override for post-startup tasks # Can also be used for blocking function start-extra() { return 0 } # Basic stop function. Kills the task and implements a SIGKILL timer function stop() { svc_log "Stopping" killall $service_process & for i in {1..100}; do if ! isup; then break; fi sleep 0.01 if (( $i > 99 )); then svc_log "Stopping with prejudice" killall -9 $service_process fi done return $? } # Basic process detection function. Returns 0 if the process exists. function isup() { pgrep "$service_process" > /dev/null 2>&1 isup-extra $? return $? } # Template function. Gets passed the result of a simple pgrep for the process function isup-extra() { return $1 }