记录一则因Polkit服务异常导致Docker无法启动的故障处理事件

1.尝试启动polkit,提示如下报错

[root@localhost /]# systemctl start polkit
Error getting authority: Error initializing authority: Error calling StartServiceByName for org.freedesktop.PolicyKit1: GDBus.Error:org.freedesktop.DBus.Error.TimedOut: Failed to activate service 'org.freedesktop.PolicyKit1': timed out (g-dbus-error-quark, 20)

该报错表示在调用 `PolicyKit` 服务时,由于超时,无法激活 `org.freedesktop.policykit1` 服务,与dbus通信超时。

2.此刻查看dbus服务状态

[root@localhost /]# systemctl status dbus
● dbus.service - D-Bus System Message Bus
   Loaded: loaded (/usr/lib/systemd/system/dbus.service; static; vendor preset: disabled)
   Active: active (running) since Fri 2024-08-30 10:11:43 CST; 24min ago
     Docs: man:dbus-daemon(1)
 Main PID: 18098 (dbus-daemon)
   CGroup: /system.slice/dbus.service
           ├─18098 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
           └─18430 /usr/sbin/abrt-dbus -t133

3.dbus运行正常,尝试重启dbus

[root@localhost /]# systemctl restart dbus
Error getting authority:error initializing authority:error calling startservicebyname for org.freedesktop.policykit1:timeout was reached(g-io- error- quark,24)

同样报错,此刻报错内容与刚开始有所不同,该错误信息与 `PolicyKit`有关,`polkit` 是一个用于授权管理的服务,通常用于授予或拒绝对系统资源的访问权限。错误内容表明在尝试调用 `org.freedesktop.policykit1` 服务时遇到了超时问题。

4.尝试手动启动 `polkitd` 守护进程,并将其置于后台运行

[root@localhost /]# usr/lib/polkit-1/polkitd --no-debug &
[1] 18021

GTP对此的解释:

这个命令用于手动启动 `polkitd` 守护进程,并将其置于后台运行。

`/usr/lib/polkit-1/polkitd`: 这是 `polkitd` 可执行文件的路径。`polkitd` 是一个权限管理服务,它负责管理系统中的权限验证请求。
  
`--no-debug`: 这个选项告诉 `polkitd` 禁用调试模式,因此不会输出调试信息,减少了不必要的日志输出。

`&`: 这个符号将命令放在后台执行,允许你在启动 `polkitd` 后继续在同一个终端中运行其他命令。

如果成功,`polkitd` 将在后台运行,并处理系统中的权限请求,比如授权用户执行特权操作。

该命令与通过systemctl启动的区别在于:

启动方式:
   - **手动启动**:你通过直接调用可执行文件来启动 `polkitd`。它不依赖于 `systemd`,并且只是在后台运行该进程。手动启动时,你没有使用 `systemctl`,因此 `systemd` 进程管理器对这个服务的状态没有管理权。此时,`polkitd` 是独立运行的,`systemd` 无法监控它的状态、重启它,或管理它的日志。
   - **systemctl 启动**:通过 `systemctl start polkit` 启动时,`polkit` 作为 `systemd` 管理的服务启动。`systemd` 会负责监控该服务的状态,自动处理启动、停止、重启等操作。`systemctl status polkit` 可以查看它的状态。

守护进程管理:
   - **手动启动**:`polkitd` 以用户启动的进程运行,`systemd` 不会管理它。如果该进程出现崩溃或异常退出,系统不会自动重启它。
   - **systemctl 启动**:`polkitd` 作为守护进程由 `systemd` 负责。如果服务崩溃,`systemd` 可以根据服务的配置自动重启它。此外,`systemd` 可以自动记录服务的启动和崩溃日志。

日志管理:
   - **手动启动**:日志的处理完全依赖于 `polkitd` 进程本身的配置。使用 `--no-debug` 参数时,调试信息会被禁用,日志输出较少且可能无法全面反映问题。
   - **systemctl 启动**:`systemd` 会收集 `polkitd` 的日志,并可以通过 `journalctl -u polkit` 查看详细的日志信息,即使是调试信息被禁用,其他重要日志仍会被记录。

服务依赖:
   - **手动启动**:如果 `polkitd` 通过手动方式启动,一些依赖于该服务的其他服务可能不会立即感知到它已经重新运行,可能导致部分依赖关系出现问题。
   - **systemctl 启动**:启动 `polkit` 时,`systemd` 会确保所有依赖该服务的其他服务按照启动顺序正确执行和恢复正常。

5.此刻启动polkit并重新启动dbus(注意顺序)

[root@localhost /]# systemctl start polkit
[root@localhost /]# systemctl restart dbus
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
[1]+  Terminated              usr/lib/polkit-1/polkitd --no-debug

6.再次查看polkit状态,running

[root@localhost /]# systemctl status polkit
● polkit.service - Authorization Manager
   Loaded: loaded (/usr/lib/systemd/system/polkit.service; static; vendor preset: enabled)
   Active: active (running) since Fri 2024-08-30 10:11:30 CST; 1min 6s ago
     Docs: man:polkit(8)
 Main PID: 18015 (polkitd)
   CGroup: /system.slice/polkit.service
           └─18015 /usr/lib/polkit-1/polkitd --no-debug

7.重新启动docker容器,故障解决!

8.总结

报错原因不详,该方法仅为临时解决方案,用于快速恢复业务,短期内临时补救。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值