]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journald.c
treewide: auto-convert the simple cases to log_*_errno()
[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
22#include <sys/epoll.h>
23#include <sys/socket.h>
24#include <errno.h>
87d2c1ff 25#include <unistd.h>
87d2c1ff 26
73f860db
ZJS
27#include "systemd/sd-journal.h"
28#include "systemd/sd-messages.h"
29#include "systemd/sd-daemon.h"
81527be1 30
89fef990 31#include "journal-authenticate.h"
d025f1e4 32#include "journald-server.h"
ef63833d 33#include "journald-kmsg.h"
35e2e347 34#include "journald-syslog.h"
87d2c1ff
LP
35
36int main(int argc, char *argv[]) {
37 Server server;
38 int r;
39
87d2c1ff
LP
40 if (argc > 1) {
41 log_error("This program does not take arguments.");
42 return EXIT_FAILURE;
43 }
44
a6903061 45 log_set_target(LOG_TARGET_SAFE);
3eff4208 46 log_set_facility(LOG_SYSLOG);
87d2c1ff
LP
47 log_parse_environment();
48 log_open();
49
50 umask(0022);
51
52 r = server_init(&server);
53 if (r < 0)
54 goto finish;
55
e6960940
LP
56 server_vacuum(&server);
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());
ef63833d 61 server_driver_message(&server, SD_MESSAGE_JOURNAL_START, "Journal started");
87d2c1ff
LP
62
63 sd_notify(false,
64 "READY=1\n"
fe652127 65 "STATUS=Processing requests...");
50f20cfd 66
87d2c1ff 67 for (;;) {
3a43da28 68 usec_t t = USEC_INFINITY, n;
87d2c1ff 69
565a9388
LP
70 r = sd_event_get_state(server.event);
71 if (r < 0)
72 goto finish;
73 if (r == SD_EVENT_FINISHED)
74 break;
75
fb0951b0 76 n = now(CLOCK_REALTIME);
89fef990 77
fb0951b0 78 if (server.max_retention_usec > 0 && server.oldest_file_usec > 0) {
89fef990 79
fb0951b0
LP
80 /* The retention time is reached, so let's vacuum! */
81 if (server.oldest_file_usec + server.max_retention_usec < n) {
82 log_info("Retention time reached.");
83 server_rotate(&server);
84 server_vacuum(&server);
85 continue;
86 }
89fef990 87
fb0951b0 88 /* Calculate when to rotate the next time */
f9a810be 89 t = server.oldest_file_usec + server.max_retention_usec - n;
fb0951b0
LP
90 }
91
92#ifdef HAVE_GCRYPT
93 if (server.system_journal) {
94 usec_t u;
95
96 if (journal_file_next_evolve_usec(server.system_journal, &u)) {
97 if (n >= u)
98 t = 0;
99 else
f9a810be 100 t = MIN(t, u - n);
fb0951b0
LP
101 }
102 }
89fef990 103#endif
89fef990 104
f9a810be 105 r = sd_event_run(server.event, t);
87d2c1ff 106 if (r < 0) {
0a1beeb6 107 log_error_errno(-r, "Failed to run event loop: %m");
87d2c1ff 108 goto finish;
89fef990 109 }
87d2c1ff 110
99add6fd 111 server_maybe_append_tags(&server);
178cc770 112 server_maybe_warn_forward_syslog_missed(&server);
87d2c1ff
LP
113 }
114
de0671ee 115 log_debug("systemd-journald stopped as pid "PID_FMT, getpid());
ef63833d 116 server_driver_message(&server, SD_MESSAGE_JOURNAL_STOP, "Journal stopped");
fe652127 117
87d2c1ff 118finish:
af4ec430
LP
119 sd_notify(false,
120 "STOPPING=1\n"
121 "STATUS=Shutting down...");
87d2c1ff
LP
122
123 server_done(&server);
124
125 return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
126}