diff options
-rw-r--r-- | fixme | 4 | ||||
-rw-r--r-- | man/systemd.special.xml.in | 27 | ||||
-rw-r--r-- | man/systemd.unit.xml | 13 | ||||
-rw-r--r-- | src/job.c | 9 | ||||
-rw-r--r-- | src/load-fragment.c | 1 | ||||
-rw-r--r-- | src/unit.c | 6 | ||||
-rw-r--r-- | src/unit.h | 3 | ||||
-rw-r--r-- | units/shutdown.target | 1 | ||||
-rw-r--r-- | units/umount.target | 1 |
9 files changed, 55 insertions, 10 deletions
@@ -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: diff --git a/man/systemd.special.xml.in b/man/systemd.special.xml.in index ac9f0f5a6a..64e37d1149 100644 --- a/man/systemd.special.xml.in +++ b/man/systemd.special.xml.in @@ -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> diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index 554130448f..a03df65dcb 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -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)) diff --git a/src/load-fragment.c b/src/load-fragment.c index 1d40b69c98..8e4ec74b07 100644 --- a/src/load-fragment.c +++ b/src/load-fragment.c @@ -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" }, diff --git a/src/unit.c b/src/unit.c index b362fd3b41..66372f2a92 100644 --- a/src/unit.c +++ b/src/unit.c @@ -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", diff --git a/src/unit.h b/src/unit.h index c9fd4a538c..3f4bbd9ed7 100644 --- a/src/unit.h +++ b/src/unit.h @@ -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 */ diff --git a/units/shutdown.target b/units/shutdown.target index c05b8b93e3..586ca4a758 100644 --- a/units/shutdown.target +++ b/units/shutdown.target @@ -10,3 +10,4 @@ [Unit] Description=Shutdown OnlyByDependency=yes +IgnoreDependencyFailure=yes diff --git a/units/umount.target b/units/umount.target index a5f31e04cb..6a00c31328 100644 --- a/units/umount.target +++ b/units/umount.target @@ -10,3 +10,4 @@ [Unit] Description=Unmount All Filesystems OnlyByDependency=yes +IgnoreDependencyFailure=yes |