From 9c8cd6c024f192e51f69194ca69fee868f0efbb4 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 10 Jul 2023 10:20:40 +0200 Subject: [PATCH] Improved logging on failure to execvp() in forked child The execvp() call always fails with -1, so only logging exit code when collecting the PID is not enough. When debugging the user needs to see the errno from execvp(), e.g., "No such file or directory", when the command was missing the absolute path to the executable. Signed-off-by: Joachim Wiberg --- src/service.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/service.c b/src/service.c index 5d9dd3ab..54e28bf4 100644 --- a/src/service.c +++ b/src/service.c @@ -790,7 +790,7 @@ static int service_start(svc_t *svc) */ pid = setsid(); if (pid < 1) - logit(LOG_ERR, "failed setsid(), pid %d: %s", pid, strerror(errno)); + syslog(LOG_ERR, "failed setsid(), pid %d: %s", pid, strerror(errno)); sig_unblock(); @@ -801,6 +801,8 @@ static int service_start(svc_t *svc) else status = execvp(args[0], &args[1]); + syslog(LOG_ERR, "failed starting %s, exit code %d: %s", svc_ident(svc, NULL, 0), + status, strerror(errno)); _exit(status); } else if (debug) { dbg("Starting PID %d: %s", svc->pid, cmdline);