chiark / gitweb /
journal: rotate on SIGUSR2
authorLennart Poettering <lennart@poettering.net>
Sat, 9 Jun 2012 13:04:14 +0000 (15:04 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 16 Jun 2012 22:03:12 +0000 (00:03 +0200)
TODO
man/systemd-journald.service.xml
src/journal/journald.c

diff --git a/TODO b/TODO
index 1f7f974abb10a8f91334a4452c3a006c04ab5434..7360681952c9831d4054eba5b2bc64a5d38444b5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -163,8 +163,6 @@ Features:
 
 * figure out whether we should leave dbus around during shutdown
 
 
 * figure out whether we should leave dbus around during shutdown
 
-* add interface to allow immediate rotation of the journal, and even flushing.
-
 * dbus: in fedora, make the machine a symlink to /etc/machine-id
 
 * journald: reuse XZ context
 * dbus: in fedora, make the machine a symlink to /etc/machine-id
 
 * journald: reuse XZ context
@@ -199,14 +197,10 @@ Features:
 
 * systemctl status: show coredumps
 
 
 * systemctl status: show coredumps
 
-* systemctl status: show whether journal was rotated since service started
-
 * save coredump in Windows/Mozilla minidump format
 
 * support crash reporting operation modes (https://live.gnome.org/GnomeOS/Design/Whiteboards/ProblemReporting)
 
 * save coredump in Windows/Mozilla minidump format
 
 * support crash reporting operation modes (https://live.gnome.org/GnomeOS/Design/Whiteboards/ProblemReporting)
 
-* journal: allow per-entry control on /var vs. /run (think incognito browser mode)
-
 * clean up session cgroups that remain after logout (think sshd), but eventually run empty
 
 * support "systemctl stop foobar@.service" to stop all units matching a certain template
 * clean up session cgroups that remain after logout (think sshd), but eventually run empty
 
 * support "systemctl stop foobar@.service" to stop all units matching a certain template
index 5d39c50f62d7523efafacfc35beb357de4b3ecea..8ee0cf4e5d343da1895b797ddef4d6615833578b 100644 (file)
                 service.</para>
         </refsect1>
 
                 service.</para>
         </refsect1>
 
+        <refsect1>
+                <title>Signals</title>
+
+                <variablelist>
+                        <varlistentry>
+                                <term>SIGUSR1</term>
+
+                                <listitem><para>Request that journal
+                                data from <filename>/run/</filename>
+                                is flushed to
+                                <filename>/var/</filename> in order to
+                                make it persistent (if this is
+                                enabled). This may be used after
+                                <filename>/var/</filename> is mounted,
+                                but is generally not required since
+                                the first journal write when
+                                <filename>/var/</filename> becomes
+                                writable triggers the flushing
+                                anyway.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term>SIGUSR2</term>
+
+                                <listitem><para>Request immediate
+                                rotation of the journal
+                                files.</para></listitem>
+                        </varlistentry>
+                </variablelist>
+        </refsect1>
+
+
+
         <refsect1>
                 <title>See Also</title>
                 <para>
         <refsect1>
                 <title>See Also</title>
                 <para>
index 795b23547b068fb6fa0acbf51bab0d3a8acec545..1bf25e80918524d9d1b391cb8a9e012f8c40c13b 100644 (file)
@@ -2143,6 +2143,7 @@ static int server_flush_proc_kmsg(Server *s) {
 
 static int process_event(Server *s, struct epoll_event *ev) {
         assert(s);
 
 static int process_event(Server *s, struct epoll_event *ev) {
         assert(s);
+        assert(ev);
 
         if (ev->data.fd == s->signal_fd) {
                 struct signalfd_siginfo sfsi;
 
         if (ev->data.fd == s->signal_fd) {
                 struct signalfd_siginfo sfsi;
@@ -2167,7 +2168,13 @@ static int process_event(Server *s, struct epoll_event *ev) {
 
                 if (sfsi.ssi_signo == SIGUSR1) {
                         server_flush_to_var(s);
 
                 if (sfsi.ssi_signo == SIGUSR1) {
                         server_flush_to_var(s);
-                        return 0;
+                        return 1;
+                }
+
+                if (sfsi.ssi_signo == SIGUSR2) {
+                        server_rotate(s);
+                        server_vacuum(s);
+                        return 1;
                 }
 
                 log_debug("Received SIG%s", signal_to_string(sfsi.ssi_signo));
                 }
 
                 log_debug("Received SIG%s", signal_to_string(sfsi.ssi_signo));
@@ -2558,7 +2565,7 @@ static int open_signalfd(Server *s) {
         assert(s);
 
         assert_se(sigemptyset(&mask) == 0);
         assert(s);
 
         assert_se(sigemptyset(&mask) == 0);
-        sigset_add_many(&mask, SIGINT, SIGTERM, SIGUSR1, -1);
+        sigset_add_many(&mask, SIGINT, SIGTERM, SIGUSR1, SIGUSR2, -1);
         assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0);
 
         s->signal_fd = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC);
         assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0);
 
         s->signal_fd = signalfd(-1, &mask, SFD_NONBLOCK|SFD_CLOEXEC);