systemctl: add service-watchdogs command
The rationale is the same as for log-level/log-target: this controls the behaviour of the manager, and belongs in systemctl.
This commit is contained in:
parent
6962cf2e2a
commit
6ab863190d
|
@ -1088,6 +1088,17 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
|
||||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><command>service-watchdogs</command> [yes|no]</term>
|
||||||
|
|
||||||
|
<listitem><para>If no argument is given, print the current state of service runtime watchdogs of
|
||||||
|
the manager. If an optional boolean argument is provided, then globally enables or disables the
|
||||||
|
service runtime watchdogs (<option>WatchdogSec=</option>) and emergency actions (e.g.
|
||||||
|
<option>OnFailure=</option> or <option>StartLimitAction=</option>); see
|
||||||
|
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||||
|
The hardware watchdog is not affected by this setting.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</refsect2>
|
</refsect2>
|
||||||
|
|
||||||
|
|
|
@ -2166,8 +2166,8 @@ static int service_watchdogs(int argc, char *argv[], void *userdata) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_error_errno(r, "Failed to create bus connection: %m");
|
return log_error_errno(r, "Failed to create bus connection: %m");
|
||||||
|
|
||||||
/* get ServiceWatchdogs */
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
|
/* get ServiceWatchdogs */
|
||||||
r = sd_bus_get_property_trivial(
|
r = sd_bus_get_property_trivial(
|
||||||
bus,
|
bus,
|
||||||
"org.freedesktop.systemd1",
|
"org.freedesktop.systemd1",
|
||||||
|
@ -2182,28 +2182,25 @@ static int service_watchdogs(int argc, char *argv[], void *userdata) {
|
||||||
|
|
||||||
printf("%s\n", yes_no(!!b));
|
printf("%s\n", yes_no(!!b));
|
||||||
|
|
||||||
return 0;
|
} else {
|
||||||
}
|
/* set ServiceWatchdogs */
|
||||||
|
b = parse_boolean(argv[1]);
|
||||||
|
if (b < 0)
|
||||||
|
return log_error_errno(b, "Failed to parse service-watchdogs argument: %m");
|
||||||
|
|
||||||
/* set ServiceWatchdogs */
|
r = sd_bus_set_property(
|
||||||
b = parse_boolean(argv[1]);
|
bus,
|
||||||
if (b < 0) {
|
"org.freedesktop.systemd1",
|
||||||
log_error("Failed to parse service-watchdogs argument.");
|
"/org/freedesktop/systemd1",
|
||||||
return -EINVAL;
|
"org.freedesktop.systemd1.Manager",
|
||||||
|
"ServiceWatchdogs",
|
||||||
|
&error,
|
||||||
|
"b",
|
||||||
|
b);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to set service-watchdog state: %s", bus_error_message(&error, r));
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_bus_set_property(
|
|
||||||
bus,
|
|
||||||
"org.freedesktop.systemd1",
|
|
||||||
"/org/freedesktop/systemd1",
|
|
||||||
"org.freedesktop.systemd1.Manager",
|
|
||||||
"ServiceWatchdogs",
|
|
||||||
&error,
|
|
||||||
"b",
|
|
||||||
b);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to set service-watchdog state: %s", bus_error_message(&error, r));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6431,6 +6431,57 @@ static int log_target(int argc, char *argv[], void *userdata) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int service_watchdogs(int argc, char *argv[], void *userdata) {
|
||||||
|
sd_bus *bus;
|
||||||
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
|
int b, r;
|
||||||
|
|
||||||
|
assert(argv);
|
||||||
|
|
||||||
|
r = acquire_bus(BUS_MANAGER, &bus);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (argc == 1) {
|
||||||
|
/* get ServiceWatchdogs */
|
||||||
|
r = sd_bus_get_property_trivial(
|
||||||
|
bus,
|
||||||
|
"org.freedesktop.systemd1",
|
||||||
|
"/org/freedesktop/systemd1",
|
||||||
|
"org.freedesktop.systemd1.Manager",
|
||||||
|
"ServiceWatchdogs",
|
||||||
|
&error,
|
||||||
|
'b',
|
||||||
|
&b);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to get service-watchdog state: %s", bus_error_message(&error, r));
|
||||||
|
|
||||||
|
printf("%s\n", yes_no(!!b));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* set ServiceWatchdogs */
|
||||||
|
assert(argc == 2);
|
||||||
|
|
||||||
|
b = parse_boolean(argv[1]);
|
||||||
|
if (b < 0)
|
||||||
|
return log_error_errno(b, "Failed to parse service-watchdogs argument: %m");
|
||||||
|
|
||||||
|
r = sd_bus_set_property(
|
||||||
|
bus,
|
||||||
|
"org.freedesktop.systemd1",
|
||||||
|
"/org/freedesktop/systemd1",
|
||||||
|
"org.freedesktop.systemd1.Manager",
|
||||||
|
"ServiceWatchdogs",
|
||||||
|
&error,
|
||||||
|
"b",
|
||||||
|
b);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to set service-watchdog state: %s", bus_error_message(&error, r));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int set_environment(int argc, char *argv[], void *userdata) {
|
static int set_environment(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
|
@ -7854,6 +7905,7 @@ static int systemctl_help(void) {
|
||||||
" daemon-reexec Reexecute systemd manager\n"
|
" daemon-reexec Reexecute systemd manager\n"
|
||||||
" log-level [LEVEL] Get/set logging threshold for manager\n"
|
" log-level [LEVEL] Get/set logging threshold for manager\n"
|
||||||
" log-target [TARGET] Get/set logging target for manager\n"
|
" log-target [TARGET] Get/set logging target for manager\n"
|
||||||
|
" service-watchdogs [BOOL] Get/set service watchdog state\n"
|
||||||
"\n%3$sSystem Commands:%4$s\n"
|
"\n%3$sSystem Commands:%4$s\n"
|
||||||
" is-system-running Check whether system is fully running\n"
|
" is-system-running Check whether system is fully running\n"
|
||||||
" default Enter system default mode\n"
|
" default Enter system default mode\n"
|
||||||
|
@ -9078,6 +9130,7 @@ static int systemctl_main(int argc, char *argv[]) {
|
||||||
{ "daemon-reexec", VERB_ANY, 1, VERB_ONLINE_ONLY, daemon_reload },
|
{ "daemon-reexec", VERB_ANY, 1, VERB_ONLINE_ONLY, daemon_reload },
|
||||||
{ "log-level", VERB_ANY, 2, 0, log_level },
|
{ "log-level", VERB_ANY, 2, 0, log_level },
|
||||||
{ "log-target", VERB_ANY, 2, 0, log_target },
|
{ "log-target", VERB_ANY, 2, 0, log_target },
|
||||||
|
{ "service-watchdogs", VERB_ANY, 2, 0, service_watchdogs },
|
||||||
{ "show-environment", VERB_ANY, 1, VERB_ONLINE_ONLY, show_environment },
|
{ "show-environment", VERB_ANY, 1, VERB_ONLINE_ONLY, show_environment },
|
||||||
{ "set-environment", 2, VERB_ANY, VERB_ONLINE_ONLY, set_environment },
|
{ "set-environment", 2, VERB_ANY, VERB_ONLINE_ONLY, set_environment },
|
||||||
{ "unset-environment", 2, VERB_ANY, VERB_ONLINE_ONLY, set_environment },
|
{ "unset-environment", 2, VERB_ANY, VERB_ONLINE_ONLY, set_environment },
|
||||||
|
|
Loading…
Reference in a new issue