diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-11-25 15:00:38 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2020-01-31 15:01:18 +0100 |
commit | b1852c48c12754f7d0e7705150b7f9488f34f4a9 (patch) | |
tree | d670d7a30e6c5dbe1c56597523775b7c7ad6f676 /src/journal/journald.c | |
parent | d6f46470f562a4a6f13a97df3b884969a1acf173 (diff) | |
download | systemd-b1852c48c12754f7d0e7705150b7f9488f34f4a9.tar.gz |
journald: allow running multiple instances of journald
If we do, we operate on a separate set of logs and runtime objects
The namespace is configured via argv[1].
Fixes: #12123
Fixes: #10230 #9519
(These latter two issues ask for slightly different stuff, but the
usecases generally can be solved by running separate instances of
journald now, hence also declaring that as "Fixes:")
Diffstat (limited to 'src/journal/journald.c')
-rw-r--r-- | src/journal/journald.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/journal/journald.c b/src/journal/journald.c index 5e7b1dcb4a..cd3a412c2e 100644 --- a/src/journal/journald.c +++ b/src/journal/journald.c @@ -14,14 +14,17 @@ #include "sigbus.h" int main(int argc, char *argv[]) { + const char *namespace; Server server; int r; - if (argc > 1) { - log_error("This program does not take arguments."); + if (argc > 2) { + log_error("This program takes one or no arguments."); return EXIT_FAILURE; } + namespace = argc > 1 ? empty_to_null(argv[1]) : NULL; + log_set_prohibit_ipc(true); log_set_target(LOG_TARGET_AUTO); log_set_facility(LOG_SYSLOG); @@ -32,7 +35,7 @@ int main(int argc, char *argv[]) { sigbus_install(); - r = server_init(&server); + r = server_init(&server, namespace); if (r < 0) goto finish; @@ -40,7 +43,11 @@ int main(int argc, char *argv[]) { server_flush_to_var(&server, true); server_flush_dev_kmsg(&server); - log_debug("systemd-journald running as pid "PID_FMT, getpid_cached()); + if (server.namespace) + log_debug("systemd-journald running as PID "PID_FMT" for namespace '%s'.", getpid_cached(), server.namespace ?: "<system>"); + else + log_debug("systemd-journald running as PID "PID_FMT" for the system.", getpid_cached()); + server_driver_message(&server, 0, "MESSAGE_ID=" SD_MESSAGE_JOURNAL_START_STR, LOG_MESSAGE("Journal started"), @@ -99,7 +106,11 @@ int main(int argc, char *argv[]) { server_maybe_warn_forward_syslog_missed(&server); } - log_debug("systemd-journald stopped as pid "PID_FMT, getpid_cached()); + if (server.namespace) + log_debug("systemd-journald stopped as PID "PID_FMT" for namespace '%s'.", getpid_cached(), server.namespace ?: "<system>"); + else + log_debug("systemd-journald stopped as PID "PID_FMT" for the system.", getpid_cached()); + server_driver_message(&server, 0, "MESSAGE_ID=" SD_MESSAGE_JOURNAL_STOP_STR, LOG_MESSAGE("Journal stopped"), |