mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-01-19 02:28:04 +07:00
service: timeout for oneshot services
Add possibility to specify timeout for oneshot services. [ https://bugzilla.redhat.com/show_bug.cgi?id=761656 Added minor fixups. -- michich ]
This commit is contained in:
parent
34cdc274ed
commit
98709151f3
@ -470,7 +470,9 @@
|
||||
time span value such as "5min
|
||||
20s". Pass 0 to disable the timeout
|
||||
logic. Defaults to
|
||||
90s.</para></listitem>
|
||||
90s, except when <varname>Type=oneshot</varname> is
|
||||
used in which case the timeout
|
||||
is disabled by default.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
|
@ -138,7 +138,7 @@ Service.ExecReload, config_parse_exec, SERVICE_EXE
|
||||
Service.ExecStop, config_parse_exec, SERVICE_EXEC_STOP, offsetof(Service, exec_command)
|
||||
Service.ExecStopPost, config_parse_exec, SERVICE_EXEC_STOP_POST, offsetof(Service, exec_command)
|
||||
Service.RestartSec, config_parse_usec, 0, offsetof(Service, restart_usec)
|
||||
Service.TimeoutSec, config_parse_usec, 0, offsetof(Service, timeout_usec)
|
||||
Service.TimeoutSec, config_parse_service_timeout, 0, offsetof(Service, timeout_usec)
|
||||
Service.WatchdogSec, config_parse_usec, 0, offsetof(Service, watchdog_usec)
|
||||
Service.StartLimitInterval, config_parse_usec, 0, offsetof(Service, start_limit.interval)
|
||||
Service.StartLimitBurst, config_parse_unsigned, 0, offsetof(Service, start_limit.burst)
|
||||
|
@ -1398,6 +1398,32 @@ int config_parse_service_sockets(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_service_timeout(
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
Service *s = userdata;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(s);
|
||||
|
||||
r = config_parse_usec(filename, line, section, lvalue, ltype, rvalue, data, userdata);
|
||||
|
||||
if (!r)
|
||||
s->timeout_defined = true;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int config_parse_unit_env_file(
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
|
@ -42,6 +42,7 @@ int config_parse_socket_bind(const char *filename, unsigned line, const char *se
|
||||
int config_parse_exec_nice(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_exec_oom_score_adjust(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_exec(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_service_timeout(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_service_type(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_service_restart(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_socket_bindtodevice(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
|
@ -1249,6 +1249,10 @@ static int service_load(Unit *u) {
|
||||
if (s->type == _SERVICE_TYPE_INVALID)
|
||||
s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
|
||||
|
||||
/* Oneshot services have disabled timeout by default */
|
||||
if (s->type == SERVICE_ONESHOT && !s->timeout_defined)
|
||||
s->timeout_usec = 0;
|
||||
|
||||
service_fix_output(s);
|
||||
|
||||
if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
|
||||
@ -2157,7 +2161,7 @@ static void service_enter_start(Service *s) {
|
||||
|
||||
r = service_spawn(s,
|
||||
c,
|
||||
s->type == SERVICE_FORKING || s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY,
|
||||
s->type == SERVICE_FORKING || s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
@ -2372,7 +2376,7 @@ static void service_run_next_main(Service *s) {
|
||||
|
||||
r = service_spawn(s,
|
||||
s->main_command,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
|
@ -164,6 +164,7 @@ struct Service {
|
||||
bool bus_name_good:1;
|
||||
bool forbid_restart:1;
|
||||
bool got_socket_fd:1;
|
||||
bool timeout_defined:1;
|
||||
#ifdef HAVE_SYSV_COMPAT
|
||||
bool is_sysv:1;
|
||||
bool sysv_has_lsb:1;
|
||||
|
Loading…
Reference in New Issue
Block a user