跟踪系统服务的调用者

时间:2016-11-03 02:42:32

标签: fedora dbus systemd

我遇到Fe​​dora 24 Server版中的错误。 Firewalld服务即使在禁用时也始终启动。但是在工作站上,它会按预期保持禁用状态。

我查了一下,有人也遇到过这个错误: https://bugzilla.redhat.com/show_bug.cgi?id=1371122

根据其中一条评论,如果其他dbus客户端请求服务,则可以启动服务。所以我最好的一点就是Server版本中的其他一些软件启动了Firewalld,它可能是一个管理程序?不知道。我猜这是驾驶舱,所以我用dnf删除了它,但这不是答案。

我写这篇文章后会报告这个错误。我想跟踪什么/谁开始服务。 systemctl list-dependencies没有显示任何内容。它说Firewalld甚至不是其他单位的依赖。

1 个答案:

答案 0 :(得分:2)

你可以做的事很少。您的服务可能已经开始使用systemd依赖项。很容易搞清楚。只需执行systemd show FIREWALLD.service并查找WantedBy=RequiredBy=即可。如果没有人想要你的服务,那很可能是通过dbus激活来启动dbus。您可以运行busctl并查找您的服务是否为dbus可激活服务。

前:

org.freedesktop.hostname1- - - (activatable) - -

如果您的服务是通过dbus激活AFAIK启动的,那么就没有简单的方法可以找到它[1]。

您可以使用systemctl mask屏蔽dbus服务,并等待应用程序尝试与您的FIREWALD通信时出现错误消息。

[1] - 我需要这些信息,我入侵了dbus代码。我有一个1-2年前工作的补丁。如果需要,请尝试将此修补程序应用于dbus并重新运行系统。

commit e1c687c96c36b7bbf2db33e967741c22fe7007c9
Author: Umut Tezduyar Lindskog <umuttl@axis.com>
Date:   Mon Sep 22 11:13:37 2014 +0200

    log originator of activation requests

diff --git a/dbus/bus/activation.c b/dbus/bus/activation.c
index 149cca8..2a9c0bd 100644
--- a/dbus/bus/activation.c
+++ b/dbus/bus/activation.c
@@ -1788,6 +1788,28 @@ bus_activation_activate_service (BusActivation  *activation,
   if (connection)
     dbus_connection_ref (connection);

+
+{
+DBusString loginfo_buf;
+unsigned long pid;
+// When connection is NULL, it is that we are trying to activate systemd
+// dbus[1106]: [system] Umut activation request by ':1.5' '/usr/bin/depd -n '
+// dbus[1106]: [system] Activating systemd to hand-off: service name='com.axis.Event.Switch' unit='dbus-com.axis.Event.Switch.service'
+if (connection != NULL && dbus_connection_get_unix_process_id (connection, &pid) && _dbus_string_init (&loginfo_buf))
+{
+  if (_dbus_command_for_pid (pid, &loginfo_buf, 50, NULL))
+  {
+    bus_context_log (activation->context,
+                   DBUS_SYSTEM_LOG_INFO, "Umut activation request by '%s' '%s'",
+                   bus_connection_get_name(connection), _dbus_string_get_const_data(&loginfo_buf));
+
+    _dbus_string_free (&loginfo_buf);
+  }
+
+}
+}
+
+