Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
d9f22bf634 | |||
587ed04903 | |||
8fdd73af45 | |||
34a43d4db6 | |||
253fd1f094 |
@@ -7,4 +7,3 @@ Services
|
||||
--------
|
||||
A service is a script in the ssm's init.d directory.
|
||||
By default it's /etc/ssm/init.d for system services and $XDG_CONFIG_HOME/ssm/init.d for user ones.
|
||||
ssm creates relevant dirs if they don't exist.
|
||||
|
71
ssm
71
ssm
@@ -4,11 +4,13 @@ shopt -s nullglob
|
||||
# Utility functions
|
||||
## Make setting default values a bit less awkward
|
||||
default() {
|
||||
declare -n _p=$1
|
||||
|
||||
if ! [[ "$_p" ]]; then
|
||||
_p=$2
|
||||
fi
|
||||
declare -n _p=$1; shift
|
||||
|
||||
[[ "$_p" ]] || {
|
||||
for v in "$@"; do
|
||||
_p+=( "$v" )
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
## Die. Why not?
|
||||
@@ -340,25 +342,36 @@ main() {
|
||||
# Let's set some defaults
|
||||
service_managed=1
|
||||
|
||||
usrdir='/usr/share/ssm'
|
||||
|
||||
if (( $UID )); then
|
||||
# XDG stuff
|
||||
default XDG_CONFIG_HOME "$HOME/.config"
|
||||
default XDG_RUNTIME_DIR "/run/user/$UID"
|
||||
|
||||
cfgdir="$XDG_CONFIG_HOME/ssm"
|
||||
service_path=( "$XDG_CONFIG_HOME/ssm/services" )
|
||||
cfg_path=( "$XDG_CONFIG_HOME/ssm" )
|
||||
|
||||
rundir="$XDG_RUNTIME_DIR/ssm"
|
||||
logdir="$HOME/log/ssm"
|
||||
else
|
||||
cfgdir='/etc/ssm'
|
||||
rundir='/run/ssm'
|
||||
logdir='/var/log/ssm'
|
||||
fi
|
||||
|
||||
service_path+=( "$cfgdir/init.d" "$rundir/services" )
|
||||
# Common service path
|
||||
service_path+=( '/etc/ssm/services' "$rundir/services" "$usrdir/services" )
|
||||
|
||||
# Common config path
|
||||
cfg_path+=( '/etc/ssm/conf.d' )
|
||||
|
||||
# Load custom functions
|
||||
for f in "$cfgdir/functions"/*; do
|
||||
source "$f" || die 9 "Failed to source functions from $f"
|
||||
for (( idx=${#cfg_path[@]}-1; idx>=0; idx-- )); do
|
||||
cfg_dir="${cfg_path[idx]}"
|
||||
|
||||
for f in "$cfg_dir/functions"/*; do
|
||||
source "$f" || die 9 "Failed to source functions from $f"
|
||||
done
|
||||
done
|
||||
|
||||
# Now create the needed runtime stuff
|
||||
@@ -372,7 +385,10 @@ main() {
|
||||
service_config=$1
|
||||
else
|
||||
for i in "${service_path[@]}"; do
|
||||
[[ -f "$i/$1" ]] && service_config="$i/$1"
|
||||
[[ -f "$i/$1" ]] && {
|
||||
service_config="$i/$1"
|
||||
break
|
||||
}
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -386,12 +402,15 @@ main() {
|
||||
svc_pidfile="$rundir/$service_name.pid"
|
||||
|
||||
# Get the service defaults
|
||||
[[ -f "$cfgdir/conf.d/$service_name" ]] && {
|
||||
source "$cfgdir/conf.d/$service_name" || die 5 "Failed to read service defaults: $cfgdir/conf.d/$service_name"
|
||||
}
|
||||
for p in "${cfg_path[@]}"; do
|
||||
[[ -f "$p/conf.d/$service_name" ]] && {
|
||||
source "$p/conf.d/$service_name" || die 5 "Failed to read service defaults: $p/conf.d/$service_name"
|
||||
break
|
||||
}
|
||||
done
|
||||
|
||||
# Get the service config
|
||||
source -- "$service_config" "${@:3}" || die 7 "Failed to read the service config: $cfgdir/init.d/$service_name"
|
||||
source -- "$service_config" "${@:3}" || die 7 "Failed to read the service config: $service_config"
|
||||
|
||||
# Legacy
|
||||
[[ "$service_args" ]] && service_command=( "${service_command[@]}" "${service_args[@]}" )
|
||||
@@ -407,18 +426,16 @@ main() {
|
||||
fi
|
||||
|
||||
# Service-level defaults
|
||||
default service_pidfile "$svc_pidfile"
|
||||
default service_logfile "$logdir/$service_name.log"
|
||||
default service_stop_timeout 30
|
||||
default service_ready_timeout 15
|
||||
default service_stop_signal 15
|
||||
default service_reload_signal 1
|
||||
default service_ready_flag "$rundir/$service_name.ready"
|
||||
default service_enabled_flag "$rundir/$service_name.enabled"
|
||||
default service_stopped_flag "$rundir/$service_name.stopped"
|
||||
|
||||
# default does not support arrays
|
||||
[[ "$service_signals" ]] || service_signals=( 1 10 12 )
|
||||
default service_pidfile "$svc_pidfile"
|
||||
default service_logfile "$logdir/$service_name.log"
|
||||
default service_ready_flag "$rundir/$service_name.ready"
|
||||
default service_enabled_flag "$rundir/$service_name.enabled"
|
||||
default service_stopped_flag "$rundir/$service_name.stopped"
|
||||
default service_stop_timeout 30
|
||||
default service_ready_timeout 15
|
||||
default service_stop_signal 15
|
||||
default service_reload_signal 1
|
||||
default service_signals 1 10 12
|
||||
|
||||
# Let's see if there's a PID
|
||||
if [[ -f "$service_pidfile" ]]; then
|
||||
|
Reference in New Issue
Block a user