From 611349e243359c62e2d4e908a0a058058ba9d7ad Mon Sep 17 00:00:00 2001 From: fbt Date: Mon, 5 Mar 2018 03:42:30 +0300 Subject: [PATCH] early edit; list known Signed-off-by: fbt --- ssm | 73 ++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/ssm b/ssm index a75527c..e42fad4 100755 --- a/ssm +++ b/ssm @@ -529,7 +529,7 @@ logs() { ## Status is a bit of a special case. It's talkative. status() { service_running && return 0 - service_enabled && return 0 + service_enabled && return 2 service_stopped && return 7 service_failed && return 9 service_exit_last is empty || return 11 @@ -577,6 +577,10 @@ var service_pid \ logdir \ _self +## Internal defaults +var flag_list_services = 0 +var flag_edit_service = 0 + ## check for some environment stuff var EDITOR := 'vim' var PAGER := 'less' @@ -664,7 +668,15 @@ done # Parse arguments while (( $# )); do case $1 in - (-h|--help) usage; exit 0;; + (-h|--help) # Show help + usage; exit 0;; + + (-L|--list-services) # List all services + flag_list_services = 1;; + + (-e|--edit-service) # Edit the service file. + flag_edit_service = 1;; + (--) shift; break;; (-*) printf 'Unknown key: %s\n' "$1" >&2; exit 1;; (*) break;; @@ -681,8 +693,26 @@ done # Common service path service_path += "$XDG_CONFIG_HOME/ssm/services" '/etc/ssm/services' "$rundir/services" "$usrdir/services" -# This script requires at least two aruments -(( $# >= 2 )) || { usage; exit 2; } +# Special actions +if flag_list_services; then + var known_services + for i in "$rundir"/*.{pid,exit,stopped,enabled}; do + i_fname="${i##*/}" + i_sname="${i_fname%.*}" + + known_services u "$i_sname" || known_services += "$i_sname" + done + + for s in "${known_services[@]}"; do + printf '%s: ' "$s" + ssm "$s" status + done + + die 0 +fi + +# This script requires at least one argument +(( $# >= 1 )) || { usage; exit 2; } # If $1 is a full path, source it. # If not, search for it in the service path. @@ -700,6 +730,11 @@ fi # Die if there is no service config file service_config || die 19 "Service not found: $1" +# Edit the service config +flag_edit_service && { + edit; die $? +} + # Service name is the basename service_name = "${1##*/}" @@ -713,6 +748,12 @@ done # Get the service config source -- "$service_config" "${@:3}" || die 7 "Failed to read the service config: $service_config" +# Legacy +service_args && service_command += "${service_args[@]}" +service_type == 'oneshot' && service_oneshot = 1 +service_respawn == 1 && service_respawn = always + +# Set respawn flag if ! service_respawn == 'no'; then case $service_respawn in (on-failure|on-success|always) service_respawn_flag = 1;; @@ -720,10 +761,7 @@ if ! service_respawn == 'no'; then esac fi -# Legacy -service_args && service_command += "${service_args[@]}" -service_type == 'oneshot' && service_oneshot = 1 - +# Unset the managed flag on services with their own pidfile service_pidfile && service_managed = 0 # Semi-hardcoded stuff @@ -835,18 +873,13 @@ case "$2" in ;; status) - if service_oneshot; then - result "$res" \ - 0 "$service_name is enabled" \ - 1 "$service_name is not enabled" - else - result "$res" \ - 0 "$service_name is running" \ - 1 "$service_name is not running" \ - 7 "$service_name was stopped" \ - 9 "$service_name has failed with code: $service_exit_last" \ - 11 "$service_name has exited with code: $service_exit_last" - fi + result "$res" \ + 0 "$service_name is running" \ + 2 "$service_name was successful" \ + 1 "$service_name is not running" \ + 7 "$service_name was stopped" \ + 9 "$service_name has failed with code: $service_exit_last" \ + 11 "$service_name has exited with code: $service_exit_last" ;; esac