journalctl: fix --follow with non-matching filter
When there is no matching entry stored in journal, then initial call of `sd_journal_previous()` following `sd_journal_seek_tail()` returns zero, and does not move the read pointer. In the main loop, on every journal event, we call `sd_journal_next()`, even though the current location is tail, and it takes no effect. In such a case, we need to call `sd_journal_previous()` instead of `sd_journal_next()`.
This commit is contained in:
@@ -2146,10 +2146,7 @@ static int show(Context *c) {
|
||||
size_t highlight[2] = {};
|
||||
|
||||
if (c->need_seek) {
|
||||
if (!arg_reverse)
|
||||
r = sd_journal_next(j);
|
||||
else
|
||||
r = sd_journal_previous(j);
|
||||
r = sd_journal_step_one(j, !arg_reverse);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to iterate through journal: %m");
|
||||
if (r == 0)
|
||||
|
||||
@@ -164,13 +164,6 @@ set -o pipefail
|
||||
# https://github.com/systemd/systemd/issues/26746
|
||||
rm -f /tmp/issue-26746-log /tmp/issue-26746-cursor
|
||||
ID=$(systemd-id128 new)
|
||||
|
||||
# FIXME:
|
||||
# After the commit 7a4ee861615101ddd2f95056cf30e69e41da86ce,
|
||||
# journalctl --follow does not work if no matching entry stored in the journal.
|
||||
# To workaround the issue, we need to add an entry before calling journalctl below.
|
||||
systemd-cat -t "$ID" /bin/sh -c 'echo aaa'
|
||||
|
||||
journalctl -t "$ID" --follow --cursor-file=/tmp/issue-26746-cursor | tee /tmp/issue-26746-log &
|
||||
systemd-cat -t "$ID" /bin/sh -c 'echo hogehoge'
|
||||
# shellcheck disable=SC2016
|
||||
|
||||
Reference in New Issue
Block a user