diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-08-21 16:20:59 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2019-08-22 09:09:45 +0200 |
commit | 5cc2cd1cd8faf01258a2130e38229fedc35e6cef (patch) | |
tree | 3f4ad833bda6954e676e26b0f2ff85130d9a57f8 | |
parent | 2de1ce6838a7da1e8ee9bf5260b55ae883732aaf (diff) | |
download | systemd-5cc2cd1cd8faf01258a2130e38229fedc35e6cef.tar.gz |
pid1: always log successfull process termination quietly
Fixes #13372.
-rw-r--r-- | src/core/mount.c | 3 | ||||
-rw-r--r-- | src/core/service.c | 10 | ||||
-rw-r--r-- | src/core/socket.c | 3 | ||||
-rw-r--r-- | src/core/swap.c | 3 | ||||
-rw-r--r-- | src/core/unit.c | 14 | ||||
-rw-r--r-- | src/core/unit.h | 2 |
6 files changed, 23 insertions, 12 deletions
diff --git a/src/core/mount.c b/src/core/mount.c index fb6a516318..4f37d3e9a9 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1323,9 +1323,10 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) { } unit_log_process_exit( - u, f == MOUNT_SUCCESS ? LOG_DEBUG : LOG_NOTICE, + u, "Mount process", mount_exec_command_to_string(m->control_command_id), + f == MOUNT_SUCCESS, code, status); /* Note that due to the io event priority logic, we can be sure the new mountinfo is loaded diff --git a/src/core/service.c b/src/core/service.c index d1893228ec..d8cfb40145 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -3417,14 +3417,11 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { f = SERVICE_SUCCESS; } - /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure - * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption - * that the service already logged the reason at a higher log level on its own. (Internally, - * unit_log_process_exit() will possibly bump this to WARNING if the service died due to a signal.) */ unit_log_process_exit( - u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, + u, "Main process", service_exec_command_to_string(SERVICE_EXEC_START), + f == SERVICE_SUCCESS, code, status); if (s->result == SERVICE_SUCCESS) @@ -3519,9 +3516,10 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { } unit_log_process_exit( - u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, + u, "Control process", service_exec_command_to_string(s->control_command_id), + f == SERVICE_SUCCESS, code, status); if (s->state != SERVICE_RELOAD && s->result == SERVICE_SUCCESS) diff --git a/src/core/socket.c b/src/core/socket.c index cc3dc5973d..46fe405a17 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -3014,9 +3014,10 @@ static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) { } unit_log_process_exit( - u, f == SOCKET_SUCCESS ? LOG_DEBUG : LOG_NOTICE, + u, "Control process", socket_exec_command_to_string(s->control_command_id), + f == SOCKET_SUCCESS, code, status); if (s->result == SOCKET_SUCCESS) diff --git a/src/core/swap.c b/src/core/swap.c index 303afc9f35..74381c0c95 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -1043,9 +1043,10 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) { } unit_log_process_exit( - u, f == SWAP_SUCCESS ? LOG_DEBUG : LOG_NOTICE, + u, "Swap process", swap_exec_command_to_string(s->control_command_id), + f == SWAP_SUCCESS, code, status); switch (s->state) { diff --git a/src/core/unit.c b/src/core/unit.c index f46858691b..31ed473f91 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -5779,16 +5779,26 @@ void unit_log_skip(Unit *u, const char *result) { void unit_log_process_exit( Unit *u, - int level, const char *kind, const char *command, + bool success, int code, int status) { + int level; + assert(u); assert(kind); - if (code != CLD_EXITED) + /* If this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure + * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption + * that the service already logged the reason at a higher log level on its own. Otherwise, make it a + * WARNING. */ + if (success) + level = LOG_DEBUG; + else if (code == CLD_EXITED) + level = LOG_NOTICE; + else level = LOG_WARNING; log_struct(level, diff --git a/src/core/unit.h b/src/core/unit.h index 9ad86fddf6..4732d72202 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -852,7 +852,7 @@ static inline void unit_log_result(Unit *u, bool success, const char *result) { unit_log_failure(u, result); } -void unit_log_process_exit(Unit *u, int level, const char *kind, const char *command, int code, int status); +void unit_log_process_exit(Unit *u, const char *kind, const char *command, bool success, int code, int status); int unit_exit_status(Unit *u); int unit_success_action_exit_status(Unit *u); |