Blob Blame History Raw
diff --git a/tuned.service b/tuned.service
index fcb3fa0..c59e3a9 100644
--- a/tuned.service
+++ b/tuned.service
@@ -1,6 +1,6 @@
 [Unit]
 Description=Dynamic System Tuning Daemon
-After=syslog.target systemd-sysctl.service network.target
+After=syslog.target systemd-sysctl.service network.target dbus.service
 Requires=dbus.service polkit.service
 Conflicts=cpupower.service
 
diff --git a/tuned/daemon/daemon.py b/tuned/daemon/daemon.py
index b7db721..f78ec5a 100644
--- a/tuned/daemon/daemon.py
+++ b/tuned/daemon/daemon.py
@@ -6,6 +6,7 @@ from tuned.exceptions import TunedException
 from tuned.profiles.exceptions import InvalidProfileException
 import tuned.consts as consts
 from tuned.utils.commands import commands
+import re
 
 log = tuned.logs.get()
 
@@ -98,6 +99,13 @@ class Daemon(object):
 			self._application._dbus_exporter.send_signal(consts.DBUS_SIGNAL_PROFILE_CHANGED, profile_name, result, errstr)
 		return errstr
 
+	def _system_shutting_down(self):
+		retcode, out = self._cmd.execute(["systemctl", "is-system-running"], no_errors = [0])
+		if out[:8] == "stopping":
+			return True
+		retcode, out = self._cmd.execute(["systemctl", "list-jobs"], no_errors = [0])
+		return re.search(r"\b(shutdown|reboot|halt|poweroff)\.target.*start", out) is not None
+
 	def _thread_code(self):
 		if self._profile is None:
 			raise TunedException("Cannot start the daemon without setting a profile.")
@@ -143,13 +151,11 @@ class Daemon(object):
 			# stopped by user and in such case do full cleanup, without systemd never
 			# do full cleanup
 			full_rollback = False
-			retcode, out = self._cmd.execute(["systemctl", "is-system-running"], no_errors = [0])
-			if retcode >= 0:
-				if out[:8] == "stopping":
-					log.info("terminating Tuned due to system shutdown / reboot")
-				else:
-					log.info("terminating Tuned, rolling back all changes")
-					full_rollback = True
+			if self._system_shutting_down():
+				log.info("terminating Tuned due to system shutdown / reboot")
+			else:
+				log.info("terminating Tuned, rolling back all changes")
+				full_rollback = True
 		if self._daemon:
 			self._unit_manager.stop_tuning(full_rollback)
 		self._unit_manager.destroy_all()