diff options
author | Daniel Mack <github@zonque.org> | 2015-08-25 23:58:03 +0200 |
---|---|---|
committer | Daniel Mack <github@zonque.org> | 2015-08-25 23:58:03 +0200 |
commit | 6a18bd1616ceeeb7b3eebf265dd10113c0c8811e (patch) | |
tree | 6babc85fca863f1df0aadd66f1dcd03a6614cd31 | |
parent | a0cb22c4751133a7ad744323bb4d774d8040ee7c (diff) | |
parent | f6a4dae6a57fcef3bb2a082f6479dd59aaf5b471 (diff) |
Merge pull request #1038 from poettering/coredumpctl-directory
Add --directory= option for reading alternate journal
-rw-r--r-- | man/coredumpctl.xml | 18 | ||||
-rw-r--r-- | src/journal/coredumpctl.c | 25 |
2 files changed, 33 insertions, 10 deletions
diff --git a/man/coredumpctl.xml b/man/coredumpctl.xml index efbc655a76..0f1afe77c3 100644 --- a/man/coredumpctl.xml +++ b/man/coredumpctl.xml @@ -86,8 +86,8 @@ </varlistentry> <varlistentry> - <term><option>-F</option></term> - <term><option>--field=</option></term> + <term><option>-F</option> <replaceable>FIELD</replaceable></term> + <term><option>--field=</option><replaceable>FIELD</replaceable></term> <listitem><para>Print all possible data values the specified field takes in matching coredump entries of the @@ -95,13 +95,21 @@ </varlistentry> <varlistentry> - <term><option>-o</option></term> - <term><option>--output=FILE</option></term> + <term><option>-o</option> <replaceable>FILE</replaceable></term> + <term><option>--output=</option><replaceable>FILE</replaceable></term> <listitem><para>Write the core to <option>FILE</option>. </para></listitem> </varlistentry> + <varlistentry> + <term><option>-D</option> <replaceable>DIR</replaceable></term> + <term><option>--directory=</option><replaceable>DIR</replaceable></term> + + <listitem><para>Use the journal files in the specified <option>DIR</option>. + </para></listitem> + </varlistentry> + <xi:include href="standard-options.xml" xpointer="help" /> <xi:include href="standard-options.xml" xpointer="version" /> <xi:include href="standard-options.xml" xpointer="no-pager" /> @@ -132,7 +140,7 @@ <listitem><para>Extract the last coredump matching specified characteristics. The coredump will be written on standard output, unless an output file is specified with - <option>-o/--output</option>. </para></listitem> + <option>--output=</option>. </para></listitem> </varlistentry> <varlistentry> diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c index 098f62af50..644ba91b0d 100644 --- a/src/journal/coredumpctl.c +++ b/src/journal/coredumpctl.c @@ -49,6 +49,7 @@ static enum { ACTION_GDB, } arg_action = ACTION_LIST; static const char* arg_field = NULL; +static const char *arg_directory = NULL; static int arg_no_pager = false; static int arg_no_legend = false; static int arg_one = false; @@ -131,6 +132,7 @@ static void help(void) { " -1 Show information about most recent entry only\n" " -F --field=FIELD List all values a certain field takes\n" " -o --output=FILE Write output to FILE\n\n" + " -D --directory=DIR Use journal files from directory\n\n" "Commands:\n" " list [MATCHES...] List available coredumps (default)\n" @@ -156,13 +158,14 @@ static int parse_argv(int argc, char *argv[], Set *matches) { { "no-legend", no_argument, NULL, ARG_NO_LEGEND }, { "output", required_argument, NULL, 'o' }, { "field", required_argument, NULL, 'F' }, + { "directory", required_argument, NULL, 'D' }, {} }; assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "ho:F:1", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "ho:F:1D:", options, NULL)) >= 0) switch(c) { case 'h': @@ -208,6 +211,10 @@ static int parse_argv(int argc, char *argv[], Set *matches) { arg_one = true; break; + case 'D': + arg_directory = optarg; + break; + case '?': return -EINVAL; @@ -808,10 +815,18 @@ int main(int argc, char *argv[]) { sigbus_install(); - r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY); - if (r < 0) { - log_error_errno(r, "Failed to open journal: %m"); - goto end; + if (arg_directory) { + r = sd_journal_open_directory(&j, arg_directory, 0); + if (r < 0) { + log_error_errno(r, "Failed to open journals in directory: %s: %m", arg_directory); + goto end; + } + } else { + r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY); + if (r < 0) { + log_error_errno(r, "Failed to open journal: %m"); + goto end; + } } /* We want full data, nothing truncated. */ |