mirror of
https://github.com/systemd/systemd.git
synced 2024-11-23 18:23:32 +08:00
Merge pull request #28697 from 1awesomeJ/new_bsod
systemd-bsod: Add "--continuous" option
This commit is contained in:
commit
b24d10e35a
@ -43,7 +43,16 @@
|
|||||||
<variablelist>
|
<variablelist>
|
||||||
<xi:include href="standard-options.xml" xpointer="help" />
|
<xi:include href="standard-options.xml" xpointer="help" />
|
||||||
<xi:include href="standard-options.xml" xpointer="version" />
|
<xi:include href="standard-options.xml" xpointer="version" />
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>-c</option></term>
|
||||||
|
<term><option>--continuous</option></term>
|
||||||
|
|
||||||
|
<listitem><para> Used to make systemd-bsod wait continuously for changes in the
|
||||||
|
journal's status if doesn't find any emergency messages on initial attempt.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include "sysctl-util.h"
|
#include "sysctl-util.h"
|
||||||
#include "terminal-util.h"
|
#include "terminal-util.h"
|
||||||
|
|
||||||
|
static bool arg_continuous = false;
|
||||||
|
|
||||||
static int help(void) {
|
static int help(void) {
|
||||||
_cleanup_free_ char *link = NULL;
|
_cleanup_free_ char *link = NULL;
|
||||||
int r;
|
int r;
|
||||||
@ -36,6 +38,8 @@ static int help(void) {
|
|||||||
"as a string and a QR code.\n\n%s"
|
"as a string and a QR code.\n\n%s"
|
||||||
" -h --help Show this help\n"
|
" -h --help Show this help\n"
|
||||||
" --version Show package version\n"
|
" --version Show package version\n"
|
||||||
|
" -c --continuous Make systemd-bsod wait continuously\n"
|
||||||
|
"for changes in the journal\n"
|
||||||
"\nSee the %s for details.\n",
|
"\nSee the %s for details.\n",
|
||||||
program_invocation_short_name,
|
program_invocation_short_name,
|
||||||
ansi_highlight(),
|
ansi_highlight(),
|
||||||
@ -75,15 +79,26 @@ static int acquire_first_emergency_log_message(char **ret) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to seek to start of jornal: %m");
|
return log_error_errno(r, "Failed to seek to start of jornal: %m");
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
r = sd_journal_next(j);
|
r = sd_journal_next(j);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to read next journal entry: %m");
|
return log_error_errno(r, "Failed to read next journal entry: %m");
|
||||||
if (r == 0) {
|
if (r > 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!arg_continuous) {
|
||||||
log_debug("No emergency level entries in the journal");
|
log_debug("No emergency level entries in the journal");
|
||||||
*ret = NULL;
|
*ret = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = sd_journal_wait(j, (uint64_t) -1);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to wait for changes: %m");
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
|
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to read journal message: %m");
|
return log_error_errno(r, "Failed to read journal message: %m");
|
||||||
@ -210,6 +225,7 @@ static int parse_argv(int argc, char * argv[]) {
|
|||||||
static const struct option options[] = {
|
static const struct option options[] = {
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
{ "version", no_argument, NULL, ARG_VERSION },
|
{ "version", no_argument, NULL, ARG_VERSION },
|
||||||
|
{ "continuous", no_argument, NULL, 'c' },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -218,7 +234,7 @@ static int parse_argv(int argc, char * argv[]) {
|
|||||||
assert(argc >= 0);
|
assert(argc >= 0);
|
||||||
assert(argv);
|
assert(argv);
|
||||||
|
|
||||||
while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
|
while ((c = getopt_long(argc, argv, "hc", options, NULL)) >= 0)
|
||||||
|
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
@ -228,6 +244,10 @@ static int parse_argv(int argc, char * argv[]) {
|
|||||||
case ARG_VERSION:
|
case ARG_VERSION:
|
||||||
return version();
|
return version();
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
arg_continuous = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -72,6 +72,13 @@ executables += [
|
|||||||
threads,
|
threads,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
libexec_template + {
|
||||||
|
'name' : 'systemd-bsod',
|
||||||
|
'conditions' : ['HAVE_QRENCODE'],
|
||||||
|
'sources' : files('bsod.c'),
|
||||||
|
'link_with' : libshared,
|
||||||
|
'dependencies' : libqrencode,
|
||||||
|
},
|
||||||
executable_template + {
|
executable_template + {
|
||||||
'name' : 'systemd-cat',
|
'name' : 'systemd-cat',
|
||||||
'public' : true,
|
'public' : true,
|
||||||
@ -95,14 +102,6 @@ executables += [
|
|||||||
threads,
|
threads,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
executable_template + {
|
|
||||||
'name' : 'systemd-bsod',
|
|
||||||
'conditions' : ['HAVE_QRENCODE'],
|
|
||||||
'public' : true,
|
|
||||||
'sources' : files('bsod.c'),
|
|
||||||
'link_with' : libshared,
|
|
||||||
'dependencies' : libqrencode,
|
|
||||||
},
|
|
||||||
journal_test_template + {
|
journal_test_template + {
|
||||||
'sources' : files('test-journal-append.c'),
|
'sources' : files('test-journal-append.c'),
|
||||||
'type' : 'manual',
|
'type' : 'manual',
|
||||||
|
@ -60,6 +60,11 @@ units = [
|
|||||||
'conditions' : ['ENABLE_INITRD'],
|
'conditions' : ['ENABLE_INITRD'],
|
||||||
'symlinks' : ['initrd.target.wants/'],
|
'symlinks' : ['initrd.target.wants/'],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'file' : 'systemd-bsod.service.in',
|
||||||
|
'conditions' : ['HAVE_QRENCODE','ENABLE_INITRD'],
|
||||||
|
'symlinks' : ['initrd.target.wants/'],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'file' : 'initrd-cleanup.service',
|
'file' : 'initrd-cleanup.service',
|
||||||
'conditions' : ['ENABLE_INITRD'],
|
'conditions' : ['ENABLE_INITRD'],
|
||||||
|
21
units/systemd-bsod.service.in
Normal file
21
units/systemd-bsod.service.in
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||||
|
#
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Displays emergency message full screen.
|
||||||
|
Documentation=man:systemd-bsod(8)
|
||||||
|
ConditionVirtualization=no
|
||||||
|
DefaultDependencies=no
|
||||||
|
Conflicts=shutdown.target
|
||||||
|
Before=shutdown.target
|
||||||
|
After=systemd-battery-check.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart={{LIBEXECDIR}}/systemd-bsod --continuous
|
Loading…
Reference in New Issue
Block a user