core: remove system start timeout logic again

The system start timeout as previously implemented would get confused by
long-running services that are included in the initial system startup
transaction for example by being cron-job-like long-running services
triggered immediately at boot. Such long-running jobs would be subject
to the default 15min timeout, esily triggering it.

Hence, remove this again. In a subsequent commit, introduce per-target
job timeouts instead, that allow us to control these timeouts more
finegrained.
This commit is contained in:
Lennart Poettering 2014-10-28 01:42:13 +01:00
parent cea358fe1b
commit fa1b91632c
6 changed files with 0 additions and 92 deletions

6
NEWS
View file

@ -22,12 +22,6 @@ CHANGES WITH 217:
/run/systemd/user directory that was already previously
supported, but is under the control of the user.
* A timeout for the bootup of the whole system can now be
configured. The system can be configured to reboot or
poweroff if the basic system default target is not reached
before the timeout (new StartTimeoutSec=,
StartTimeoutAction=, StartTimeoutRebootArgument= options).
* systemd-logind can be configured to also handle lid switch
events even when the machine is docked or multiple displays
are attached (HandleLidSwitchDocked= option).

View file

@ -279,32 +279,6 @@
too.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>StartTimeoutSec=</varname></term>
<term><varname>StartTimeoutAction=</varname></term>
<term><varname>StartTimeoutRebootArgument=</varname></term>
<listitem><para>Configures an over-all
system start-up timeout and controls
what to do when the timeout is
reached. <varname>StartTimeoutSec=</varname>
specifies the timeout, and defaults to
<literal>15min</literal>. <varname>StartTimeoutAction=</varname>
configures the action to take when the
system did not finish boot-up within
the specified time. It takes the same
values as the per-service
<varname>StartLimitAction=</varname>
setting, see
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. Defaults to
<option>poweroff-force</option>. <varname>StartTimeoutRebootArgument=</varname>
configures an optional reboot string
to pass to the
<citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
system call.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>DefaultTimerAccuracySec=</varname></term>

View file

@ -116,9 +116,6 @@ static FILE* arg_serialization = NULL;
static bool arg_default_cpu_accounting = false;
static bool arg_default_blockio_accounting = false;
static bool arg_default_memory_accounting = false;
static usec_t arg_start_timeout_usec = DEFAULT_MANAGER_START_TIMEOUT_USEC;
static FailureAction arg_start_timeout_action = FAILURE_ACTION_POWEROFF_FORCE;
static char *arg_start_timeout_reboot_arg = NULL;
static void nop_handler(int sig) {}
@ -673,9 +670,6 @@ static int parse_config_file(void) {
{ "Manager", "DefaultCPUAccounting", config_parse_bool, 0, &arg_default_cpu_accounting },
{ "Manager", "DefaultBlockIOAccounting", config_parse_bool, 0, &arg_default_blockio_accounting },
{ "Manager", "DefaultMemoryAccounting", config_parse_bool, 0, &arg_default_memory_accounting },
{ "Manager", "StartTimeoutSec", config_parse_sec, 0, &arg_start_timeout_usec },
{ "Manager", "StartTimeoutAction", config_parse_failure_action, 0, &arg_start_timeout_action },
{ "Manager", "StartTimeoutRebootArgument",config_parse_string, 0, &arg_start_timeout_reboot_arg },
{}
};
@ -1635,9 +1629,6 @@ int main(int argc, char *argv[]) {
m->default_memory_accounting = arg_default_memory_accounting;
m->runtime_watchdog = arg_runtime_watchdog;
m->shutdown_watchdog = arg_shutdown_watchdog;
m->start_timeout_usec = arg_start_timeout_usec;
m->start_timeout_action = arg_start_timeout_action;
free_and_strdup(&m->start_timeout_reboot_arg, arg_start_timeout_reboot_arg);
m->userspace_timestamp = userspace_timestamp;
m->kernel_timestamp = kernel_timestamp;
@ -1827,9 +1818,6 @@ finish:
set_free(arg_syscall_archs);
arg_syscall_archs = NULL;
free(arg_start_timeout_reboot_arg);
arg_start_timeout_reboot_arg = NULL;
mac_selinux_finish();
if (reexecute) {

View file

@ -459,8 +459,6 @@ int manager_new(SystemdRunningAs running_as, bool test_run, Manager **_m) {
m->running_as = running_as;
m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->default_timer_accuracy_usec = USEC_PER_MINUTE;
m->start_timeout_usec = DEFAULT_MANAGER_START_TIMEOUT_USEC;
m->start_timeout_action = FAILURE_ACTION_POWEROFF_FORCE;
m->idle_pipe[0] = m->idle_pipe[1] = m->idle_pipe[2] = m->idle_pipe[3] = -1;
@ -863,9 +861,6 @@ void manager_free(Manager *m) {
manager_close_idle_pipe(m);
sd_event_source_unref(m->start_timeout_event_source);
free(m->start_timeout_reboot_arg);
udev_unref(m->udev);
sd_event_unref(m->event);
@ -1013,20 +1008,6 @@ static int manager_distribute_fds(Manager *m, FDSet *fds) {
return 0;
}
static int on_start_timeout(sd_event_source *s, usec_t usec, void *userdata) {
Manager *m = userdata;
assert(s);
assert(m);
m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
log_error("Startup timed out.");
failure_action(m, m->start_timeout_action, m->start_timeout_reboot_arg);
return 0;
}
int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
int r, q;
@ -1099,22 +1080,6 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
m->send_reloading_done = true;
}
/* Possibly set up a start timeout */
if (!dual_timestamp_is_set(&m->finish_timestamp)) {
m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
if (m->start_timeout_usec) {
r = sd_event_add_time(
m->event,
&m->start_timeout_event_source,
CLOCK_MONOTONIC,
now(CLOCK_MONOTONIC) + m->start_timeout_usec, 0,
on_start_timeout, m);
if (r < 0)
log_error("Failed to add start timeout event: %s", strerror(-r));
}
}
return r;
}
@ -2558,8 +2523,6 @@ void manager_check_finished(Manager *m) {
dual_timestamp_get(&m->finish_timestamp);
m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
if (m->running_as == SYSTEMD_SYSTEM && detect_container(NULL) <= 0) {
/* Note that m->kernel_usec.monotonic is always at 0,

View file

@ -33,8 +33,6 @@
/* Enforce upper limit how many names we allow */
#define MANAGER_MAX_NAMES 131072 /* 128K */
#define DEFAULT_MANAGER_START_TIMEOUT_USEC (15*USEC_PER_MINUTE)
typedef struct Manager Manager;
typedef enum ManagerState {
@ -284,12 +282,6 @@ struct Manager {
/* Used for processing polkit authorization responses */
Hashmap *polkit_registry;
/* System wide startup timeouts */
usec_t start_timeout_usec;
sd_event_source *start_timeout_event_source;
FailureAction start_timeout_action;
char *start_timeout_reboot_arg;
};
int manager_new(SystemdRunningAs running_as, bool test_run, Manager **m);

View file

@ -23,9 +23,6 @@
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#StartTimeoutSec=15min
#StartTimeoutAction=poweroff-force
#StartTimeoutRebootArgument=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit