mirror of
https://github.com/systemd/systemd.git
synced 2024-11-23 10:13:34 +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>
|
||||
<xi:include href="standard-options.xml" xpointer="help" />
|
||||
<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>
|
||||
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "sysctl-util.h"
|
||||
#include "terminal-util.h"
|
||||
|
||||
static bool arg_continuous = false;
|
||||
|
||||
static int help(void) {
|
||||
_cleanup_free_ char *link = NULL;
|
||||
int r;
|
||||
@ -36,6 +38,8 @@ static int help(void) {
|
||||
"as a string and a QR code.\n\n%s"
|
||||
" -h --help Show this help\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",
|
||||
program_invocation_short_name,
|
||||
ansi_highlight(),
|
||||
@ -75,13 +79,24 @@ static int acquire_first_emergency_log_message(char **ret) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to seek to start of jornal: %m");
|
||||
|
||||
r = sd_journal_next(j);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to read next journal entry: %m");
|
||||
if (r == 0) {
|
||||
log_debug("No emergency level entries in the journal");
|
||||
*ret = NULL;
|
||||
return 0;
|
||||
for(;;) {
|
||||
r = sd_journal_next(j);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to read next journal entry: %m");
|
||||
if (r > 0)
|
||||
break;
|
||||
|
||||
if (!arg_continuous) {
|
||||
log_debug("No emergency level entries in the journal");
|
||||
*ret = NULL;
|
||||
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);
|
||||
@ -210,6 +225,7 @@ static int parse_argv(int argc, char * argv[]) {
|
||||
static const struct option options[] = {
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "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(argv);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
|
||||
while ((c = getopt_long(argc, argv, "hc", options, NULL)) >= 0)
|
||||
|
||||
switch (c) {
|
||||
|
||||
@ -228,6 +244,10 @@ static int parse_argv(int argc, char * argv[]) {
|
||||
case ARG_VERSION:
|
||||
return version();
|
||||
|
||||
case 'c':
|
||||
arg_continuous = true;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -72,6 +72,13 @@ executables += [
|
||||
threads,
|
||||
],
|
||||
},
|
||||
libexec_template + {
|
||||
'name' : 'systemd-bsod',
|
||||
'conditions' : ['HAVE_QRENCODE'],
|
||||
'sources' : files('bsod.c'),
|
||||
'link_with' : libshared,
|
||||
'dependencies' : libqrencode,
|
||||
},
|
||||
executable_template + {
|
||||
'name' : 'systemd-cat',
|
||||
'public' : true,
|
||||
@ -95,14 +102,6 @@ executables += [
|
||||
threads,
|
||||
],
|
||||
},
|
||||
executable_template + {
|
||||
'name' : 'systemd-bsod',
|
||||
'conditions' : ['HAVE_QRENCODE'],
|
||||
'public' : true,
|
||||
'sources' : files('bsod.c'),
|
||||
'link_with' : libshared,
|
||||
'dependencies' : libqrencode,
|
||||
},
|
||||
journal_test_template + {
|
||||
'sources' : files('test-journal-append.c'),
|
||||
'type' : 'manual',
|
||||
|
@ -60,6 +60,11 @@ units = [
|
||||
'conditions' : ['ENABLE_INITRD'],
|
||||
'symlinks' : ['initrd.target.wants/'],
|
||||
},
|
||||
{
|
||||
'file' : 'systemd-bsod.service.in',
|
||||
'conditions' : ['HAVE_QRENCODE','ENABLE_INITRD'],
|
||||
'symlinks' : ['initrd.target.wants/'],
|
||||
},
|
||||
{
|
||||
'file' : 'initrd-cleanup.service',
|
||||
'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