diff --git a/ssm b/ssm index 81008bf..cd44e9d 100755 --- a/ssm +++ b/ssm @@ -89,7 +89,7 @@ svc() { var job_pid svc::cleanup() { - kill -n "$service_stop_signal" "$job_pid" + nullexec kill -n "$service_stop_signal" "$job_pid" pid_wait "$job_pid" rm -f "$svc_pidfile" "$service_ready_flag" @@ -99,7 +99,7 @@ svc() { kill -n "$service_reload_signal" "$job_pid" }; trap 'svc::reload' HUP - "$@" & job_pid = "$!" + "$@" 1>"$service_logfile_out" 2>"$service_logfile_err" & job_pid = "$!" printf '%s' "$job_pid" > "$svc_pidfile" wait "$job_pid" @@ -297,9 +297,9 @@ start() { if service_managed; then if service_respawn; then - svc respawn "${service_command[@]}" &>"$service_logfile" & + svc respawn "${service_command[@]}" & else - svc "${service_command[@]}" &>"$service_logfile" & + svc "${service_command[@]}" & fi if timer "$service_ready_timeout" ready; then @@ -308,11 +308,11 @@ start() { return 5 fi elif service_oneshot; then - "${service_command[@]}" &>"$service_logfile"; res=$? + "${service_command[@]}" 1>"$service_logfile_out" 2>"$service_logfile_err"; res=$? (( res )) && return "$res" printf '1' > "$service_enabled_flag" else - exec "${service_command[@]}" & + exec "${service_command[@]}" 1>"$service_logfile_out" 2>"$service_logfile_err" & fi return 0 @@ -368,7 +368,9 @@ info() { "$_status_label" "$_status" \ "Exec" "${service_command[*]} ${service_args[*]}" \ "Respawn" "${service_respawn:-false}" \ - "Config path" "${service_config}" \ + "Config path" "$service_config" \ + "Output log" "$service_logfile_out" \ + "Error log" "$service_logfile_err" if _status == 'yes'; then _info_items += \ @@ -386,7 +388,7 @@ restart() { } edit() { $EDITOR "$service_config"; } -logs() { $PAGER "$service_logfile"; } +logs() { printf '%s\n' "$service_logfile_out" "$service_logfile_err"; } ## Status is a bit of a special case. It's talkative. status() { @@ -414,7 +416,8 @@ var service_pid \ service_path \ service_name \ service_args \ - service_logfile \ + service_logfile_out \ + service_logfile_err \ service_ready_flag \ service_enabled_flag \ service_stopped_flag \ @@ -446,6 +449,7 @@ var service_ready_timeout = 15 var service_stop_signal = 15 var service_reload_signal = 1 var service_signals = 1 10 12 +var service_nologs = 0 var systemd = 0 var systemd_service_path = /etc/systemd/system /run/systemd/system /lib/systemd/system var ssm_config = 0 @@ -568,11 +572,18 @@ svc_pidfile = "$rundir/$service_name.pid" # Service-level defaults service_pidfile := "$svc_pidfile" -service_logfile := "$logdir/$service_name.log" +service_logfile_out := "$logdir/${service_name}.out.log" +service_logfile_err := "$logdir/${service_name}.err.log" service_ready_flag := "$rundir/$service_name.ready" service_enabled_flag := "$rundir/$service_name.enabled" service_stopped_flag := "$rundir/$service_name.stopped" +# A shortcut for disabling logging +if service_nologs; then + service_logfile_out = '/dev/null' + service_logfile_err = '/dev/null' +fi + # Let's see if there's a PID if [[ -f "$service_pidfile" ]]; then service_pid = "$(<$service_pidfile)"