4 Commits

Author SHA1 Message Date
fbt
7c584eb8ee service path
Signed-off-by: fbt <fbt@fleshless.org>
2021-01-24 19:36:37 +03:00
fbt
608e7d4d9d Why
Signed-off-by: fbt <fbt@fleshless.org>
2020-12-03 19:14:21 +03:00
fbt
be3d90ea79 A simpler approach
Signed-off-by: fbt <fbt@fleshless.org>
2020-03-28 19:39:54 +03:00
fbt
c5bbf92022 experimental netns support and some fixes
Signed-off-by: fbt <fbt@fleshless.org>
2020-03-28 19:12:15 +03:00

34
ssm
View File

@@ -143,10 +143,12 @@ run_service_action() {
spawn() { spawn() {
if [[ $service_logfile_out == "$service_logfile_err" ]]; then if [[ $service_logfile_out == "$service_logfile_err" ]]; then
exec "$@" >"$service_logfile_out" 2>&1 exec 3>"$service_logfile_out"
else else
exec "$@" >"$service_logfile_out" 2>"$service_logfile_err" exec 3>"$service_logfile_err"
fi fi
exec "$@" >"$service_logfile_out" 2>&3
}; readonly spawn; }; readonly spawn;
cgroup_get_procs() { cgroup_get_procs() {
@@ -243,7 +245,7 @@ svc() {
# One service failure, two service failures... # One service failure, two service failures...
if service_success_exit u "$job_exit"; then if service_success_exit u "$job_exit"; then
job_success = 1 job_success = 1
(( fail_counter )) && fail_counter-- (( fail_counter )) && fail_counter=0
else else
job_success = 0 job_success = 0
fail_counter++ fail_counter++
@@ -613,6 +615,7 @@ var flag_reset_exit = 0
var flag_reread_service = 0 var flag_reread_service = 0
var flag_forget_service = 0 var flag_forget_service = 0
var flag_load_service = 0 var flag_load_service = 0
var flag_no_netns = 0
## check for some environment stuff ## check for some environment stuff
var EDITOR := 'vim' var EDITOR := 'vim'
@@ -674,14 +677,6 @@ case "$0" in
(*) _self = "$PWD/$0";; (*) _self = "$PWD/$0";;
esac esac
# Warn the user of deprecated stuff.
for p in "/etc/ssm/init.d" "$XDG_CONFIG_HOME/ssm/init.d"; do
if [[ -d "$p" ]]; then
printf 'WARNING: `%s` was renamed to `%s`! Please move your scripts accordingly!\n' "$p" "${p%init.d}services" >&2
service_path += "$p"
fi
done
# Source the config # Source the config
if cfg_file is file; then if cfg_file is file; then
source "$cfg_file" || die 37 "Failed to load config: $cfg_file" source "$cfg_file" || die 37 "Failed to load config: $cfg_file"
@@ -726,6 +721,9 @@ while (( $# )); do
(-i|--info) (-i|--info)
action = 'info';; action = 'info';;
(--no-netns)
flag_no_netns = 1;;
(--) shift; break;; (--) shift; break;;
(-*) printf 'Unknown key: %s\n' "$1" >&2; exit 1;; (-*) printf 'Unknown key: %s\n' "$1" >&2; exit 1;;
(*) break;; (*) break;;
@@ -740,7 +738,11 @@ for d in "$rundir" "$rundir/current" "$logdir"; do
done done
# Common service path # Common service path
service_path += "$XDG_CONFIG_HOME/ssm/services" '/etc/ssm/services' "$rundir/services" "$usrdir/services" if (( UID )); then
service_path += "$rundir/current" "$XDG_CONFIG_HOME/ssm/services" '/etc/ssm/services' "$usrdir/services"
else
service_path += "$rundir/current" '/etc/ssm/services' "$usrdir/services"
fi
# Special actions # Special actions
if flag_list_services; then if flag_list_services; then
@@ -775,12 +777,13 @@ if [[ $service_name == /* ]]; then
service_config = "$service_name" service_config = "$service_name"
service_name = "${service_name##*/}" service_name = "${service_name##*/}"
else else
for i in "$service_config_current" "${service_path[@]/%//$service_name}"; do for i in "${service_path[@]/%//$service_name}"; do
[[ -f "$i" ]] && { [[ -f "$i" ]] && {
service_config = "$i" service_config = "$i"
break break
} }
done done
fi fi
# We really don't want this overriden # We really don't want this overriden
@@ -822,6 +825,11 @@ flag_reset_exit && { reset-exit; die $?; }
# Get the service config # Get the service config
source -- "$service_config" "${@:3}" || die 7 "Failed to read the service config: $service_config" source -- "$service_config" "${@:3}" || die 7 "Failed to read the service config: $service_config"
# Rexec ourselves in the requested netns
flag_no_netns || {
[[ $service_netns ]] && exec ip netns exec "$service_netns" "$0" --no-netns "$service_name" "$@"
}
# “Load” the service into memory # “Load” the service into memory
if ! service_config == "$service_config_current" && service_remember; then if ! service_config == "$service_config_current" && service_remember; then
cat "$service_config" > "$rundir/current/$service_name" cat "$service_config" > "$rundir/current/$service_name"