mirror of
https://github.com/systemd/systemd
synced 2024-07-22 18:55:10 +00:00
unit: introduce IgnoreDependencyFailure=
This commit is contained in:
parent
f6023656e1
commit
3b6fdb5b5a
4
fixme
4
fixme
|
@ -37,10 +37,10 @@
|
|||
|
||||
* systemctl status $PID, systemctl stop $PID!
|
||||
|
||||
* make shutdown go on even if conflicting units fail to shut down.
|
||||
|
||||
* sulogin in den single user mode, mit plymouth --hide davor
|
||||
|
||||
* replace remaining libcgroup use
|
||||
|
||||
External:
|
||||
|
||||
* patch /etc/init.d/functions with:
|
||||
|
|
|
@ -84,7 +84,8 @@
|
|||
<filename>systemd-initctl.service</filename>,
|
||||
<filename>systemd-initctl.socket</filename>,
|
||||
<filename>systemd-logger.service</filename>,
|
||||
<filename>systemd-logger.socket</filename></para>
|
||||
<filename>systemd-logger.socket</filename>,
|
||||
<filename>umount.target</filename></para>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
|
@ -499,8 +500,10 @@
|
|||
terminated on system shutdown
|
||||
shall add Conflicts
|
||||
dependencies to this unit for
|
||||
their service unit during
|
||||
installation.</para>
|
||||
their service unit, which is
|
||||
implicitly done when
|
||||
<varname>DefaultDependencies=yes</varname>
|
||||
is set (the default).</para>
|
||||
|
||||
<para>systemd automatically
|
||||
adds dependencies of type
|
||||
|
@ -653,6 +656,24 @@
|
|||
kernel log buffer.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><filename>umount.target</filename></term>
|
||||
<listitem>
|
||||
<para>A special target unit
|
||||
that umounts all mount and
|
||||
automount points on system
|
||||
shutdown.</para>
|
||||
|
||||
<para>Mounts that shall be
|
||||
unmounted on system shutdown
|
||||
shall add Conflicts
|
||||
dependencies to this unit for
|
||||
their mount unit, which is
|
||||
implicitly done when
|
||||
<varname>DefaultDependencies=yes</varname>
|
||||
is set (the default).</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
|
|
@ -482,6 +482,19 @@
|
|||
ones.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>IgnoreDependencyFailure=</varname></term>
|
||||
|
||||
<listitem><para>Takes a boolean
|
||||
argument. If <option>true</option> and
|
||||
a requirement dependency of this unit
|
||||
fails to start up this unit will be
|
||||
started nonetheless, ignoring that
|
||||
failure. If <option>false</option>
|
||||
(the default) and a dependency unit
|
||||
fails the unit will immediately fail
|
||||
too and the job is removed.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>Unit file may include a [Install] section, which
|
||||
|
|
|
@ -495,14 +495,16 @@ int job_finish_and_invalidate(Job *j, bool success) {
|
|||
t == JOB_RELOAD_OR_START) {
|
||||
|
||||
SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY], i)
|
||||
if (other->meta.job &&
|
||||
if (!other->meta.ignore_dependency_failure &&
|
||||
other->meta.job &&
|
||||
(other->meta.job->type == JOB_START ||
|
||||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
|
||||
other->meta.job->type == JOB_RELOAD_OR_START))
|
||||
job_finish_and_invalidate(other->meta.job, false);
|
||||
|
||||
SET_FOREACH(other, u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i)
|
||||
if (other->meta.job &&
|
||||
if (!other->meta.ignore_dependency_failure &&
|
||||
other->meta.job &&
|
||||
!other->meta.job->override &&
|
||||
(other->meta.job->type == JOB_START ||
|
||||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
|
||||
|
@ -512,7 +514,8 @@ int job_finish_and_invalidate(Job *j, bool success) {
|
|||
} else if (t == JOB_STOP) {
|
||||
|
||||
SET_FOREACH(other, u->meta.dependencies[UNIT_CONFLICTS], i)
|
||||
if (other->meta.job &&
|
||||
if (!other->meta.ignore_dependency_failure &&
|
||||
other->meta.job &&
|
||||
(other->meta.job->type == JOB_START ||
|
||||
other->meta.job->type == JOB_VERIFY_ACTIVE ||
|
||||
other->meta.job->type == JOB_RELOAD_OR_START))
|
||||
|
|
|
@ -1562,6 +1562,7 @@ static int load_from_path(Unit *u, const char *path) {
|
|||
{ "StopWhenUnneeded", config_parse_bool, &u->meta.stop_when_unneeded, "Unit" },
|
||||
{ "OnlyByDependency", config_parse_bool, &u->meta.only_by_dependency, "Unit" },
|
||||
{ "DefaultDependencies", config_parse_bool, &u->meta.default_dependencies, "Unit" },
|
||||
{ "IgnoreDependencyFailure",config_parse_bool, &u->meta.ignore_dependency_failure, "Unit" },
|
||||
|
||||
{ "PIDFile", config_parse_path, &u->service.pid_file, "Service" },
|
||||
{ "ExecStartPre", config_parse_exec, u->service.exec_command+SERVICE_EXEC_START_PRE, "Service" },
|
||||
|
|
|
@ -626,11 +626,13 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
|
|||
"%s\tRecursive Stop: %s\n"
|
||||
"%s\tStopWhenUnneeded: %s\n"
|
||||
"%s\tOnlyByDependency: %s\n"
|
||||
"%s\tDefaultDependencies: %s\n",
|
||||
"%s\tDefaultDependencies: %s\n"
|
||||
"%s\tIgnoreDependencyFailure: %s\n",
|
||||
prefix, yes_no(u->meta.recursive_stop),
|
||||
prefix, yes_no(u->meta.stop_when_unneeded),
|
||||
prefix, yes_no(u->meta.only_by_dependency),
|
||||
prefix, yes_no(u->meta.default_dependencies));
|
||||
prefix, yes_no(u->meta.default_dependencies),
|
||||
prefix, yes_no(u->meta.ignore_dependency_failure));
|
||||
|
||||
LIST_FOREACH(by_unit, b, u->meta.cgroup_bondings)
|
||||
fprintf(f, "%s\tControlGroup: %s:%s\n",
|
||||
|
|
|
@ -184,6 +184,9 @@ struct Meta {
|
|||
/* Create default depedencies */
|
||||
bool default_dependencies;
|
||||
|
||||
/* Bring up this unit even if a dependency fails to start */
|
||||
bool ignore_dependency_failure;
|
||||
|
||||
/* When deserializing, temporarily store the job type for this
|
||||
* unit here, if there was a job scheduled */
|
||||
int deserialized_job; /* This is actually of type JobType */
|
||||
|
|
|
@ -10,3 +10,4 @@
|
|||
[Unit]
|
||||
Description=Shutdown
|
||||
OnlyByDependency=yes
|
||||
IgnoreDependencyFailure=yes
|
||||
|
|
|
@ -10,3 +10,4 @@
|
|||
[Unit]
|
||||
Description=Unmount All Filesystems
|
||||
OnlyByDependency=yes
|
||||
IgnoreDependencyFailure=yes
|
||||
|
|
Loading…
Reference in a new issue