From: Lennart Poettering Date: Thu, 25 Oct 2018 16:36:56 +0000 (+0200) Subject: journalctl: add ability to vacuum and rotate in one step X-Git-Tag: v240~467^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8df64fd01daf0b1664a96ad8c89f64f142af0e93;p=thirdparty%2Fsystemd.git journalctl: add ability to vacuum and rotate in one step journalctl --vacuum-*= only vacuums archived files. To archive all active files the rotate operation is used. Let's add a new switch that combines both, so that the user a single command to first move all running journal files into archival and then vacuum them. See: #1017 --- diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 9bd2d9a1502..fac4eb044aa 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -167,6 +167,7 @@ static enum { ACTION_SYNC, ACTION_ROTATE, ACTION_VACUUM, + ACTION_ROTATE_AND_VACUUM, ACTION_LIST_FIELDS, ACTION_LIST_FIELD_NAMES, } arg_action = ACTION_SHOW; @@ -687,7 +688,7 @@ static int parse_argv(int argc, char *argv[]) { return r; } - arg_action = ACTION_VACUUM; + arg_action = arg_action == ACTION_ROTATE ? ACTION_ROTATE_AND_VACUUM : ACTION_VACUUM; break; case ARG_VACUUM_FILES: @@ -697,7 +698,7 @@ static int parse_argv(int argc, char *argv[]) { return r; } - arg_action = ACTION_VACUUM; + arg_action = arg_action == ACTION_ROTATE ? ACTION_ROTATE_AND_VACUUM : ACTION_VACUUM; break; case ARG_VACUUM_TIME: @@ -707,7 +708,7 @@ static int parse_argv(int argc, char *argv[]) { return r; } - arg_action = ACTION_VACUUM; + arg_action = arg_action == ACTION_ROTATE ? ACTION_ROTATE_AND_VACUUM : ACTION_VACUUM; break; #if HAVE_GCRYPT @@ -896,7 +897,7 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_ROTATE: - arg_action = ACTION_ROTATE; + arg_action = arg_action == ACTION_VACUUM ? ACTION_ROTATE_AND_VACUUM : ACTION_ROTATE; break; case ARG_SYNC: @@ -2120,6 +2121,7 @@ int main(int argc, char *argv[]) { case ACTION_DISK_USAGE: case ACTION_LIST_BOOTS: case ACTION_VACUUM: + case ACTION_ROTATE_AND_VACUUM: case ACTION_LIST_FIELDS: case ACTION_LIST_FIELD_NAMES: /* These ones require access to the journal files, continue below. */ @@ -2237,6 +2239,14 @@ int main(int argc, char *argv[]) { r = list_boots(j); goto finish; + case ACTION_ROTATE_AND_VACUUM: + + r = rotate(); + if (r < 0) + goto finish; + + _fallthrough_; + case ACTION_VACUUM: { Directory *d; Iterator i;