]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journald.c
journald: allow additional payload in server_driver_message
[thirdparty/systemd.git] / src / journal / journald.c
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3/***
4 This file is part of systemd.
5
6 Copyright 2011 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
87d2c1ff 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
87d2c1ff 22#include <unistd.h>
87d2c1ff 23
8580d1f7 24#include "sd-daemon.h"
cf0fbc49 25#include "sd-messages.h"
81527be1 26
cf0fbc49 27#include "formats-util.h"
89fef990 28#include "journal-authenticate.h"
ef63833d 29#include "journald-kmsg.h"
cf0fbc49 30#include "journald-server.h"
35e2e347 31#include "journald-syslog.h"
fa6ac760
LP
32#include "sigbus.h"
33
87d2c1ff
LP
34int main(int argc, char *argv[]) {
35 Server server;
36 int r;
37
87d2c1ff
LP
38 if (argc > 1) {
39 log_error("This program does not take arguments.");
40 return EXIT_FAILURE;
41 }
42
a6903061 43 log_set_target(LOG_TARGET_SAFE);
3eff4208 44 log_set_facility(LOG_SYSLOG);
87d2c1ff
LP
45 log_parse_environment();
46 log_open();
47
48 umask(0022);
49
fa6ac760
LP
50 sigbus_install();
51
87d2c1ff
LP
52 r = server_init(&server);
53 if (r < 0)
54 goto finish;
55
8580d1f7 56 server_vacuum(&server, false, false);
e6960940 57 server_flush_to_var(&server);
51abe64c 58 server_flush_dev_kmsg(&server);
e6960940 59
de0671ee 60 log_debug("systemd-journald running as pid "PID_FMT, getpid());
8a03c9ef
ZJS
61 server_driver_message(&server, SD_MESSAGE_JOURNAL_START,
62 LOG_MESSAGE("Journal started"),
63 NULL);
87d2c1ff 64
87d2c1ff 65 for (;;) {
3a43da28 66 usec_t t = USEC_INFINITY, n;
87d2c1ff 67
565a9388
LP
68 r = sd_event_get_state(server.event);
69 if (r < 0)
70 goto finish;
71 if (r == SD_EVENT_FINISHED)
72 break;
73
fb0951b0 74 n = now(CLOCK_REALTIME);
89fef990 75
fb0951b0 76 if (server.max_retention_usec > 0 && server.oldest_file_usec > 0) {
89fef990 77
fb0951b0
LP
78 /* The retention time is reached, so let's vacuum! */
79 if (server.oldest_file_usec + server.max_retention_usec < n) {
80 log_info("Retention time reached.");
81 server_rotate(&server);
8580d1f7 82 server_vacuum(&server, false, false);
fb0951b0
LP
83 continue;
84 }
89fef990 85
fb0951b0 86 /* Calculate when to rotate the next time */
f9a810be 87 t = server.oldest_file_usec + server.max_retention_usec - n;
fb0951b0
LP
88 }
89
90#ifdef HAVE_GCRYPT
91 if (server.system_journal) {
92 usec_t u;
93
94 if (journal_file_next_evolve_usec(server.system_journal, &u)) {
95 if (n >= u)
96 t = 0;
97 else
f9a810be 98 t = MIN(t, u - n);
fb0951b0
LP
99 }
100 }
89fef990 101#endif
89fef990 102
f9a810be 103 r = sd_event_run(server.event, t);
87d2c1ff 104 if (r < 0) {
da927ba9 105 log_error_errno(r, "Failed to run event loop: %m");
87d2c1ff 106 goto finish;
89fef990 107 }
87d2c1ff 108
99add6fd 109 server_maybe_append_tags(&server);
178cc770 110 server_maybe_warn_forward_syslog_missed(&server);
87d2c1ff
LP
111 }
112
de0671ee 113 log_debug("systemd-journald stopped as pid "PID_FMT, getpid());
8a03c9ef
ZJS
114 server_driver_message(&server, SD_MESSAGE_JOURNAL_STOP,
115 LOG_MESSAGE("Journal stopped"),
116 NULL);
fe652127 117
87d2c1ff 118finish:
87d2c1ff
LP
119 server_done(&server);
120
121 return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
122}