failure-action: generalize failure action to emergency action
This commit is contained in:
parent
6fa441140e
commit
87a47f99bc
|
@ -1275,8 +1275,8 @@ libcore_la_SOURCES = \
|
|||
src/core/audit-fd.h \
|
||||
src/core/show-status.c \
|
||||
src/core/show-status.h \
|
||||
src/core/failure-action.c \
|
||||
src/core/failure-action.h
|
||||
src/core/emergency-action.c \
|
||||
src/core/emergency-action.h
|
||||
|
||||
nodist_libcore_la_SOURCES = \
|
||||
src/core/load-fragment-gperf.c \
|
||||
|
|
|
@ -36,7 +36,7 @@ static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_type, service_type, ServiceType
|
|||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, service_result, ServiceResult);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_restart, service_restart, ServiceRestart);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_notify_access, notify_access, NotifyAccess);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_failure_action, failure_action, FailureAction);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_emergency_action, emergency_action, EmergencyAction);
|
||||
|
||||
const sd_bus_vtable bus_service_vtable[] = {
|
||||
SD_BUS_VTABLE_START(0),
|
||||
|
@ -50,7 +50,7 @@ const sd_bus_vtable bus_service_vtable[] = {
|
|||
SD_BUS_PROPERTY("RuntimeMaxUSec", "t", bus_property_get_usec, offsetof(Service, runtime_max_usec), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("WatchdogUSec", "t", bus_property_get_usec, offsetof(Service, watchdog_usec), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
BUS_PROPERTY_DUAL_TIMESTAMP("WatchdogTimestamp", offsetof(Service, watchdog_timestamp), 0),
|
||||
SD_BUS_PROPERTY("FailureAction", "s", property_get_failure_action, offsetof(Service, failure_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("FailureAction", "s", property_get_emergency_action, offsetof(Service, emergency_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("PermissionsStartOnly", "b", bus_property_get_bool, offsetof(Service, permissions_start_only), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("RootDirectoryStartOnly", "b", bus_property_get_bool, offsetof(Service, root_directory_start_only), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("RemainAfterExit", "b", bus_property_get_bool, offsetof(Service, remain_after_exit), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
|
@ -79,7 +79,7 @@ const sd_bus_vtable bus_service_vtable[] = {
|
|||
/* The following four are obsolete, and thus marked hidden here. They moved into the Unit interface */
|
||||
SD_BUS_PROPERTY("StartLimitInterval", "t", bus_property_get_usec, offsetof(Unit, start_limit.interval), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
SD_BUS_PROPERTY("StartLimitBurst", "u", bus_property_get_unsigned, offsetof(Unit, start_limit.burst), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
SD_BUS_PROPERTY("StartLimitAction", "s", property_get_failure_action, offsetof(Unit, start_limit_action), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
SD_BUS_PROPERTY("StartLimitAction", "s", property_get_emergency_action, offsetof(Unit, start_limit_action), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
SD_BUS_PROPERTY("RebootArgument", "s", NULL, offsetof(Unit, reboot_arg), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
|
||||
SD_BUS_VTABLE_END
|
||||
};
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_load_state, unit_load_state, UnitLoadState);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_job_mode, job_mode, JobMode);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_failure_action, failure_action, FailureAction);
|
||||
static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_emergency_action, emergency_action, EmergencyAction);
|
||||
|
||||
static int property_get_names(
|
||||
sd_bus *bus,
|
||||
|
@ -750,7 +750,7 @@ const sd_bus_vtable bus_unit_vtable[] = {
|
|||
SD_BUS_PROPERTY("IgnoreOnIsolate", "b", bus_property_get_bool, offsetof(Unit, ignore_on_isolate), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("NeedDaemonReload", "b", property_get_need_daemon_reload, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("JobTimeoutUSec", "t", bus_property_get_usec, offsetof(Unit, job_timeout), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("JobTimeoutAction", "s", property_get_failure_action, offsetof(Unit, job_timeout_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("JobTimeoutAction", "s", property_get_emergency_action, offsetof(Unit, job_timeout_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("JobTimeoutRebootArgument", "s", NULL, offsetof(Unit, job_timeout_reboot_arg), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("ConditionResult", "b", bus_property_get_bool, offsetof(Unit, condition_result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("AssertResult", "b", bus_property_get_bool, offsetof(Unit, assert_result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
|
@ -762,7 +762,7 @@ const sd_bus_vtable bus_unit_vtable[] = {
|
|||
SD_BUS_PROPERTY("Transient", "b", bus_property_get_bool, offsetof(Unit, transient), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("StartLimitIntervalSec", "t", bus_property_get_usec, offsetof(Unit, start_limit.interval), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("StartLimitBurst", "u", bus_property_get_unsigned, offsetof(Unit, start_limit.burst), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("StartLimitAction", "s", property_get_failure_action, offsetof(Unit, start_limit_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("StartLimitAction", "s", property_get_emergency_action, offsetof(Unit, start_limit_action), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("RebootArgument", "s", NULL, offsetof(Unit, reboot_arg), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("InvocationID", "ay", bus_property_get_id128, offsetof(Unit, invocation_id), 0),
|
||||
|
||||
|
|
|
@ -23,59 +23,60 @@
|
|||
|
||||
#include "bus-error.h"
|
||||
#include "bus-util.h"
|
||||
#include "failure-action.h"
|
||||
#include "emergency-action.h"
|
||||
#include "special.h"
|
||||
#include "string-table.h"
|
||||
#include "terminal-util.h"
|
||||
|
||||
static void log_and_status(Manager *m, const char *message) {
|
||||
log_warning("%s", message);
|
||||
static void log_and_status(Manager *m, const char *message, const char *reason) {
|
||||
log_warning("%s: %s", message, reason);
|
||||
manager_status_printf(m, STATUS_TYPE_EMERGENCY,
|
||||
ANSI_HIGHLIGHT_RED " !! " ANSI_NORMAL,
|
||||
"%s", message);
|
||||
"%s: %s", message, reason);
|
||||
}
|
||||
|
||||
int failure_action(
|
||||
int emergency_action(
|
||||
Manager *m,
|
||||
FailureAction action,
|
||||
const char *reboot_arg) {
|
||||
EmergencyAction action,
|
||||
const char *reboot_arg,
|
||||
const char *reason) {
|
||||
|
||||
assert(m);
|
||||
assert(action >= 0);
|
||||
assert(action < _FAILURE_ACTION_MAX);
|
||||
assert(action < _EMERGENCY_ACTION_MAX);
|
||||
|
||||
if (action == FAILURE_ACTION_NONE)
|
||||
if (action == EMERGENCY_ACTION_NONE)
|
||||
return -ECANCELED;
|
||||
|
||||
if (!MANAGER_IS_SYSTEM(m)) {
|
||||
/* Downgrade all options to simply exiting if we run
|
||||
* in user mode */
|
||||
|
||||
log_warning("Exiting as result of failure.");
|
||||
log_warning("Exiting: %s", reason);
|
||||
m->exit_code = MANAGER_EXIT;
|
||||
return -ECANCELED;
|
||||
}
|
||||
|
||||
switch (action) {
|
||||
|
||||
case FAILURE_ACTION_REBOOT:
|
||||
log_and_status(m, "Rebooting as result of failure.");
|
||||
case EMERGENCY_ACTION_REBOOT:
|
||||
log_and_status(m, "Rebooting", reason);
|
||||
|
||||
(void) update_reboot_parameter_and_warn(reboot_arg);
|
||||
(void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL);
|
||||
|
||||
break;
|
||||
|
||||
case FAILURE_ACTION_REBOOT_FORCE:
|
||||
log_and_status(m, "Forcibly rebooting as result of failure.");
|
||||
case EMERGENCY_ACTION_REBOOT_FORCE:
|
||||
log_and_status(m, "Forcibly rebooting", reason);
|
||||
|
||||
(void) update_reboot_parameter_and_warn(reboot_arg);
|
||||
m->exit_code = MANAGER_REBOOT;
|
||||
|
||||
break;
|
||||
|
||||
case FAILURE_ACTION_REBOOT_IMMEDIATE:
|
||||
log_and_status(m, "Rebooting immediately as result of failure.");
|
||||
case EMERGENCY_ACTION_REBOOT_IMMEDIATE:
|
||||
log_and_status(m, "Rebooting immediately", reason);
|
||||
|
||||
sync();
|
||||
|
||||
|
@ -89,18 +90,18 @@ int failure_action(
|
|||
reboot(RB_AUTOBOOT);
|
||||
break;
|
||||
|
||||
case FAILURE_ACTION_POWEROFF:
|
||||
log_and_status(m, "Powering off as result of failure.");
|
||||
case EMERGENCY_ACTION_POWEROFF:
|
||||
log_and_status(m, "Powering off", reason);
|
||||
(void) manager_add_job_by_name_and_warn(m, JOB_START, SPECIAL_POWEROFF_TARGET, JOB_REPLACE_IRREVERSIBLY, NULL);
|
||||
break;
|
||||
|
||||
case FAILURE_ACTION_POWEROFF_FORCE:
|
||||
log_and_status(m, "Forcibly powering off as result of failure.");
|
||||
case EMERGENCY_ACTION_POWEROFF_FORCE:
|
||||
log_and_status(m, "Forcibly powering off", reason);
|
||||
m->exit_code = MANAGER_POWEROFF;
|
||||
break;
|
||||
|
||||
case FAILURE_ACTION_POWEROFF_IMMEDIATE:
|
||||
log_and_status(m, "Powering off immediately as result of failure.");
|
||||
case EMERGENCY_ACTION_POWEROFF_IMMEDIATE:
|
||||
log_and_status(m, "Powering off immediately", reason);
|
||||
|
||||
sync();
|
||||
|
||||
|
@ -109,19 +110,19 @@ int failure_action(
|
|||
break;
|
||||
|
||||
default:
|
||||
assert_not_reached("Unknown failure action");
|
||||
assert_not_reached("Unknown emergency action");
|
||||
}
|
||||
|
||||
return -ECANCELED;
|
||||
}
|
||||
|
||||
static const char* const failure_action_table[_FAILURE_ACTION_MAX] = {
|
||||
[FAILURE_ACTION_NONE] = "none",
|
||||
[FAILURE_ACTION_REBOOT] = "reboot",
|
||||
[FAILURE_ACTION_REBOOT_FORCE] = "reboot-force",
|
||||
[FAILURE_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate",
|
||||
[FAILURE_ACTION_POWEROFF] = "poweroff",
|
||||
[FAILURE_ACTION_POWEROFF_FORCE] = "poweroff-force",
|
||||
[FAILURE_ACTION_POWEROFF_IMMEDIATE] = "poweroff-immediate"
|
||||
static const char* const emergency_action_table[_EMERGENCY_ACTION_MAX] = {
|
||||
[EMERGENCY_ACTION_NONE] = "none",
|
||||
[EMERGENCY_ACTION_REBOOT] = "reboot",
|
||||
[EMERGENCY_ACTION_REBOOT_FORCE] = "reboot-force",
|
||||
[EMERGENCY_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate",
|
||||
[EMERGENCY_ACTION_POWEROFF] = "poweroff",
|
||||
[EMERGENCY_ACTION_POWEROFF_FORCE] = "poweroff-force",
|
||||
[EMERGENCY_ACTION_POWEROFF_IMMEDIATE] = "poweroff-immediate"
|
||||
};
|
||||
DEFINE_STRING_TABLE_LOOKUP(failure_action, FailureAction);
|
||||
DEFINE_STRING_TABLE_LOOKUP(emergency_action, EmergencyAction);
|
|
@ -20,22 +20,22 @@
|
|||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef enum FailureAction {
|
||||
FAILURE_ACTION_NONE,
|
||||
FAILURE_ACTION_REBOOT,
|
||||
FAILURE_ACTION_REBOOT_FORCE,
|
||||
FAILURE_ACTION_REBOOT_IMMEDIATE,
|
||||
FAILURE_ACTION_POWEROFF,
|
||||
FAILURE_ACTION_POWEROFF_FORCE,
|
||||
FAILURE_ACTION_POWEROFF_IMMEDIATE,
|
||||
_FAILURE_ACTION_MAX,
|
||||
_FAILURE_ACTION_INVALID = -1
|
||||
} FailureAction;
|
||||
typedef enum EmergencyAction {
|
||||
EMERGENCY_ACTION_NONE,
|
||||
EMERGENCY_ACTION_REBOOT,
|
||||
EMERGENCY_ACTION_REBOOT_FORCE,
|
||||
EMERGENCY_ACTION_REBOOT_IMMEDIATE,
|
||||
EMERGENCY_ACTION_POWEROFF,
|
||||
EMERGENCY_ACTION_POWEROFF_FORCE,
|
||||
EMERGENCY_ACTION_POWEROFF_IMMEDIATE,
|
||||
_EMERGENCY_ACTION_MAX,
|
||||
_EMERGENCY_ACTION_INVALID = -1
|
||||
} EmergencyAction;
|
||||
|
||||
#include "macro.h"
|
||||
#include "manager.h"
|
||||
|
||||
int failure_action(Manager *m, FailureAction action, const char *reboot_arg);
|
||||
int emergency_action(Manager *m, EmergencyAction action, const char *reboot_arg, const char *reason);
|
||||
|
||||
const char* failure_action_to_string(FailureAction i) _const_;
|
||||
FailureAction failure_action_from_string(const char *s) _pure_;
|
||||
const char* emergency_action_to_string(EmergencyAction i) _const_;
|
||||
EmergencyAction emergency_action_from_string(const char *s) _pure_;
|
|
@ -927,7 +927,7 @@ static int job_dispatch_timer(sd_event_source *s, uint64_t monotonic, void *user
|
|||
u = j->unit;
|
||||
job_finish_and_invalidate(j, JOB_TIMEOUT, true, false);
|
||||
|
||||
failure_action(u->manager, u->job_timeout_action, u->job_timeout_reboot_arg);
|
||||
emergency_action(u->manager, u->job_timeout_action, u->job_timeout_reboot_arg, "job timed out");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -188,13 +188,13 @@ Unit.OnFailureIsolate, config_parse_job_mode_isolate, 0,
|
|||
Unit.IgnoreOnIsolate, config_parse_bool, 0, offsetof(Unit, ignore_on_isolate)
|
||||
Unit.IgnoreOnSnapshot, config_parse_warn_compat, DISABLED_LEGACY, 0
|
||||
Unit.JobTimeoutSec, config_parse_sec_fix_0, 0, offsetof(Unit, job_timeout)
|
||||
Unit.JobTimeoutAction, config_parse_failure_action, 0, offsetof(Unit, job_timeout_action)
|
||||
Unit.JobTimeoutAction, config_parse_emergency_action, 0, offsetof(Unit, job_timeout_action)
|
||||
Unit.JobTimeoutRebootArgument, config_parse_string, 0, offsetof(Unit, job_timeout_reboot_arg)
|
||||
Unit.StartLimitIntervalSec, config_parse_sec, 0, offsetof(Unit, start_limit.interval)
|
||||
m4_dnl The following is a legacy alias name for compatibility
|
||||
Unit.StartLimitInterval, config_parse_sec, 0, offsetof(Unit, start_limit.interval)
|
||||
Unit.StartLimitBurst, config_parse_unsigned, 0, offsetof(Unit, start_limit.burst)
|
||||
Unit.StartLimitAction, config_parse_failure_action, 0, offsetof(Unit, start_limit_action)
|
||||
Unit.StartLimitAction, config_parse_emergency_action, 0, offsetof(Unit, start_limit_action)
|
||||
Unit.RebootArgument, config_parse_string, 0, offsetof(Unit, reboot_arg)
|
||||
Unit.ConditionPathExists, config_parse_unit_condition_path, CONDITION_PATH_EXISTS, offsetof(Unit, conditions)
|
||||
Unit.ConditionPathExistsGlob, config_parse_unit_condition_path, CONDITION_PATH_EXISTS_GLOB, offsetof(Unit, conditions)
|
||||
|
@ -251,9 +251,9 @@ Service.WatchdogSec, config_parse_sec, 0,
|
|||
m4_dnl The following three only exist for compatibility, they moved into Unit, see above
|
||||
Service.StartLimitInterval, config_parse_sec, 0, offsetof(Unit, start_limit.interval)
|
||||
Service.StartLimitBurst, config_parse_unsigned, 0, offsetof(Unit, start_limit.burst)
|
||||
Service.StartLimitAction, config_parse_failure_action, 0, offsetof(Unit, start_limit_action)
|
||||
Service.StartLimitAction, config_parse_emergency_action, 0, offsetof(Unit, start_limit_action)
|
||||
Service.RebootArgument, config_parse_string, 0, offsetof(Unit, reboot_arg)
|
||||
Service.FailureAction, config_parse_failure_action, 0, offsetof(Service, failure_action)
|
||||
Service.FailureAction, config_parse_emergency_action, 0, offsetof(Service, emergency_action)
|
||||
Service.Type, config_parse_service_type, 0, offsetof(Service, type)
|
||||
Service.Restart, config_parse_service_restart, 0, offsetof(Service, restart)
|
||||
Service.PermissionsStartOnly, config_parse_bool, 0, offsetof(Service, permissions_start_only)
|
||||
|
|
|
@ -2523,7 +2523,7 @@ int config_parse_unit_condition_null(
|
|||
}
|
||||
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_notify_access, notify_access, NotifyAccess, "Failed to parse notify access specifier");
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_failure_action, failure_action, FailureAction, "Failed to parse failure action specifier");
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_emergency_action, emergency_action, EmergencyAction, "Failed to parse failure action specifier");
|
||||
|
||||
int config_parse_unit_requires_mounts_for(
|
||||
const char *unit,
|
||||
|
@ -4315,7 +4315,7 @@ void unit_dump_config_items(FILE *f) {
|
|||
{ config_parse_unit_slice, "SLICE" },
|
||||
{ config_parse_documentation, "URL" },
|
||||
{ config_parse_service_timeout, "SECONDS" },
|
||||
{ config_parse_failure_action, "ACTION" },
|
||||
{ config_parse_emergency_action, "ACTION" },
|
||||
{ config_parse_set_status, "STATUS" },
|
||||
{ config_parse_service_sockets, "SOCKETS" },
|
||||
{ config_parse_environ, "ENVIRON" },
|
||||
|
|
|
@ -75,7 +75,7 @@ int config_parse_unit_condition_string(const char *unit, const char *filename, u
|
|||
int config_parse_unit_condition_null(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_kill_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_notify_access(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_failure_action(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_emergency_action(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_unit_requires_mounts_for(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_syscall_filter(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_syscall_archs(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
|
|
@ -1455,7 +1455,7 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
|
|||
|
||||
if (s->result != SERVICE_SUCCESS) {
|
||||
log_unit_warning(UNIT(s), "Failed with result '%s'.", service_result_to_string(s->result));
|
||||
failure_action(UNIT(s)->manager, s->failure_action, UNIT(s)->reboot_arg);
|
||||
emergency_action(UNIT(s)->manager, s->emergency_action, UNIT(s)->reboot_arg, "service failed");
|
||||
}
|
||||
|
||||
if (allow_restart && service_shall_restart(s)) {
|
||||
|
|
|
@ -178,7 +178,7 @@ struct Service {
|
|||
char *status_text;
|
||||
int status_errno;
|
||||
|
||||
FailureAction failure_action;
|
||||
EmergencyAction emergency_action;
|
||||
|
||||
UnitRef accept_socket;
|
||||
|
||||
|
|
|
@ -982,8 +982,8 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
|||
if (u->job_timeout != USEC_INFINITY)
|
||||
fprintf(f, "%s\tJob Timeout: %s\n", prefix, format_timespan(timespan, sizeof(timespan), u->job_timeout, 0));
|
||||
|
||||
if (u->job_timeout_action != FAILURE_ACTION_NONE)
|
||||
fprintf(f, "%s\tJob Timeout Action: %s\n", prefix, failure_action_to_string(u->job_timeout_action));
|
||||
if (u->job_timeout_action != EMERGENCY_ACTION_NONE)
|
||||
fprintf(f, "%s\tJob Timeout Action: %s\n", prefix, emergency_action_to_string(u->job_timeout_action));
|
||||
|
||||
if (u->job_timeout_reboot_arg)
|
||||
fprintf(f, "%s\tJob Timeout Reboot Argument: %s\n", prefix, u->job_timeout_reboot_arg);
|
||||
|
@ -1490,7 +1490,7 @@ int unit_start_limit_test(Unit *u) {
|
|||
log_unit_warning(u, "Start request repeated too quickly.");
|
||||
u->start_limit_hit = true;
|
||||
|
||||
return failure_action(u->manager, u->start_limit_action, u->reboot_arg);
|
||||
return emergency_action(u->manager, u->start_limit_action, u->reboot_arg, "unit failed");
|
||||
}
|
||||
|
||||
/* Errors:
|
||||
|
|
|
@ -29,7 +29,7 @@ typedef struct UnitRef UnitRef;
|
|||
typedef struct UnitStatusMessageFormats UnitStatusMessageFormats;
|
||||
|
||||
#include "condition.h"
|
||||
#include "failure-action.h"
|
||||
#include "emergency-action.h"
|
||||
#include "install.h"
|
||||
#include "list.h"
|
||||
#include "unit-name.h"
|
||||
|
@ -114,7 +114,7 @@ struct Unit {
|
|||
|
||||
/* Job timeout and action to take */
|
||||
usec_t job_timeout;
|
||||
FailureAction job_timeout_action;
|
||||
EmergencyAction job_timeout_action;
|
||||
char *job_timeout_reboot_arg;
|
||||
|
||||
/* References to this */
|
||||
|
@ -178,7 +178,7 @@ struct Unit {
|
|||
|
||||
/* Put a ratelimit on unit starting */
|
||||
RateLimit start_limit;
|
||||
FailureAction start_limit_action;
|
||||
EmergencyAction start_limit_action;
|
||||
char *reboot_arg;
|
||||
|
||||
/* Make sure we never enter endless loops with the check unneeded logic, or the BindsTo= logic */
|
||||
|
|
|
@ -63,7 +63,7 @@ int main(int argc, char **argv) {
|
|||
test_table(device_state, DEVICE_STATE);
|
||||
test_table(exec_input, EXEC_INPUT);
|
||||
test_table(exec_output, EXEC_OUTPUT);
|
||||
test_table(failure_action, FAILURE_ACTION);
|
||||
test_table(emergency_action, EMERGENCY_ACTION);
|
||||
test_table(job_mode, JOB_MODE);
|
||||
test_table(job_result, JOB_RESULT);
|
||||
test_table(job_state, JOB_STATE);
|
||||
|
|
Loading…
Reference in New Issue