diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-01-28 11:02:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-28 11:02:24 +0100 |
commit | dcfb4b6103f0dc0becff2f91c856c7642544f235 (patch) | |
tree | c81d0892ef82c506c2fc17b098aac2535a03b008 | |
parent | 055a52575cf769f2ab0760a02aa84c8e92eac355 (diff) | |
parent | 8d5c7661a7fafa372fc3a7b411500cc3ba10a9b6 (diff) | |
download | systemd-dcfb4b6103f0dc0becff2f91c856c7642544f235.tar.gz |
Merge pull request #8025 from sourcejedi/pid1_journal_or2
pid1: when we can't log to journal, remember our fallback log target
-rw-r--r-- | src/basic/log.c | 28 | ||||
-rw-r--r-- | src/basic/log.h | 5 | ||||
-rw-r--r-- | src/core/main.c | 1 | ||||
-rw-r--r-- | src/core/manager.c | 3 | ||||
-rw-r--r-- | src/core/shutdown.c | 2 |
5 files changed, 16 insertions, 23 deletions
diff --git a/src/basic/log.c b/src/basic/log.c index 2b15ecba84..12ee65a5c3 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -83,35 +83,34 @@ static bool prohibit_ipc = false; * use here. */ static char *log_abort_msg = NULL; -void log_close_console(void) { +static void log_close_console(void) { if (console_fd < 0) return; - if (getpid_cached() == 1) { - if (console_fd >= 3) - safe_close(console_fd); + if (console_fd >= 3) + safe_close(console_fd); - console_fd = -1; - } + console_fd = -1; } static int log_open_console(void) { - if (console_fd >= 0) + if (!always_reopen_console) { + console_fd = STDERR_FILENO; return 0; + } - if (always_reopen_console) { + if (console_fd < 3) { console_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC); if (console_fd < 0) return console_fd; - } else - console_fd = STDERR_FILENO; + } return 0; } -void log_close_kmsg(void) { +static void log_close_kmsg(void) { kmsg_fd = safe_close(kmsg_fd); } @@ -127,7 +126,7 @@ static int log_open_kmsg(void) { return 0; } -void log_close_syslog(void) { +static void log_close_syslog(void) { syslog_fd = safe_close(syslog_fd); } @@ -199,7 +198,7 @@ fail: return r; } -void log_close_journal(void) { +static void log_close_journal(void) { journal_fd = safe_close(journal_fd); } @@ -241,7 +240,8 @@ int log_open(void) { /* If we don't use the console we close it here, to not get * killed by SAK. If we don't use syslog we close it here so * that we are not confused by somebody deleting the socket in - * the fs. If we don't use /dev/kmsg we still keep it open, + * the fs, and to make sure we don't use it if prohibit_ipc is + * set. If we don't use /dev/kmsg we still keep it open, * because there is no reason to close it. */ if (log_target == LOG_TARGET_NULL) { diff --git a/src/basic/log.h b/src/basic/log.h index f2c6cd8c0a..5b5a25bd6d 100644 --- a/src/basic/log.h +++ b/src/basic/log.h @@ -94,11 +94,6 @@ int log_open(void); void log_close(void); void log_forget_fds(void); -void log_close_syslog(void); -void log_close_journal(void); -void log_close_kmsg(void); -void log_close_console(void); - void log_parse_environment_realm(LogRealm realm); #define log_parse_environment() \ log_parse_environment_realm(LOG_REALM) diff --git a/src/core/main.c b/src/core/main.c index 245b4c076c..56200a8fad 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -2392,7 +2392,6 @@ int main(int argc, char *argv[]) { /* Running inside a container, as PID 1 */ arg_system = true; log_set_target(LOG_TARGET_CONSOLE); - log_close_console(); /* force reopen of /dev/console */ log_open(); /* For later on, see above... */ diff --git a/src/core/manager.c b/src/core/manager.c index bed52aa42e..e837a46f56 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -3543,14 +3543,13 @@ void manager_recheck_journal(Manager *m) { /* The journal is fully and entirely up? If so, let's permit logging to it, if that's configured. */ log_set_prohibit_ipc(false); - log_open(); } else { /* If the journal is down, don't ever log to it, otherwise we might end up deadlocking ourselves as we * might trigger an activation ourselves we can't fulfill */ log_set_prohibit_ipc(true); - log_close_journal(); } + log_open(); } void manager_set_show_status(Manager *m, ShowStatus mode) { diff --git a/src/core/shutdown.c b/src/core/shutdown.c index fb882db99b..cc31b33f1c 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -284,7 +284,7 @@ int main(int argc, char *argv[]) { /* journald will die if not gone yet. The log target defaults * to console, but may have been changed by command line options. */ - log_close_console(); /* force reopen of /dev/console */ + log_set_prohibit_ipc(true); log_open(); umask(0022); |