summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-01-28 11:02:24 +0100
committerGitHub <noreply@github.com>2018-01-28 11:02:24 +0100
commitdcfb4b6103f0dc0becff2f91c856c7642544f235 (patch)
treec81d0892ef82c506c2fc17b098aac2535a03b008
parent055a52575cf769f2ab0760a02aa84c8e92eac355 (diff)
parent8d5c7661a7fafa372fc3a7b411500cc3ba10a9b6 (diff)
downloadsystemd-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.c28
-rw-r--r--src/basic/log.h5
-rw-r--r--src/core/main.c1
-rw-r--r--src/core/manager.c3
-rw-r--r--src/core/shutdown.c2
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);