diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2015-05-27 14:52:17 +0200 |
---|---|---|
committer | Martin Pitt <martin.pitt@ubuntu.com> | 2015-05-28 19:42:45 +0200 |
commit | 355ff449007df8be192ac316ab314599f56b2241 (patch) | |
tree | 027b2ea7b688d3993c2b5918aaea9c0e0bd26bfe | |
parent | 0f0467e63b0e0688ae9edb1512c1a2637d62ddb4 (diff) |
systemctl: Don't skip SysV init.d scripts when enabling/disabling units
If there is both a SysV init.d script and a systemd unit for a given name, we
want to do the same enable/disable operation for both, instead of just on the
systemd unit. This keeps the enablement status in sync so that switching init
systems behaves as expected.
-rw-r--r-- | src/systemctl/systemctl.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index f0ba83dabf..897248ab36 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -5149,7 +5149,10 @@ static int enable_sysv_units(const char *verb, char **args) { break; } - if (found_native) + /* If we have both a native unit and a SysV script, + * enable/disable them both (below); for is-enabled, prefer the + * native unit */ + if (found_native && streq(verb, "is-enabled")) continue; p = path_join(arg_root, SYSTEM_SYSVINIT_PATH, name); @@ -5161,7 +5164,10 @@ static int enable_sysv_units(const char *verb, char **args) { if (!found_sysv) continue; - log_info("%s is not a native service, redirecting to systemd-sysv-install", name); + if (found_native) + log_info("Synchronizing state of %s with SysV init with %s...", name, argv[0]); + else + log_info("%s is not a native service, redirecting to systemd-sysv-install", name); if (!isempty(arg_root)) argv[c++] = q = strappend("--root=", arg_root); @@ -5209,6 +5215,9 @@ static int enable_sysv_units(const char *verb, char **args) { } else return -EPROTO; + if (found_native) + continue; + /* Remove this entry, so that we don't try enabling it as native unit */ assert(f > 0); f--; |