summaryrefslogtreecommitdiff
path: root/src/journal/journald.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-11-25 15:00:38 +0100
committerLennart Poettering <lennart@poettering.net>2020-01-31 15:01:18 +0100
commitb1852c48c12754f7d0e7705150b7f9488f34f4a9 (patch)
treed670d7a30e6c5dbe1c56597523775b7c7ad6f676 /src/journal/journald.c
parentd6f46470f562a4a6f13a97df3b884969a1acf173 (diff)
downloadsystemd-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.c21
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"),