无法启动python原因_firewalld依赖python2,莫名的启动失败终于找到原因

webchat.jpg

centos7中遇到的问题,firewalld无法启动:

systemctl start firewalld

报错信息如下:

Job for firewalld.service failed because the control process exited with error

code. See "systemctl status firewalld.service" and "journalctl -xe" for details

我执行journalctl -f监控日志输出,得到以下信息:

polkitd[6524]: Registered Authentication Agent for unix-process:3411:2850658888 (system bus name :1.347925 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8)

systemd[1]: Starting firewalld - dynamic firewall daemon...

systemd[1]: firewalld.service: main process exited, code=exited, status=1/FAILURE

systemd[1]: Failed to start firewalld - dynamic firewall daemon.

systemd[1]: Unit firewalld.service entered failed state.

systemd[1]: firewalld.service failed.

polkitd[6524]: Unregistered Authentication Agent for unix-process:3411:2850658888 (system bus name :1.347925, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)

感觉像是什么授权问题,可事后证明,这真的是一种误导,在网上搜索解决方案的时候,找到了一篇文档,就是参考链接的第一篇,这是讲mysql的,文中的一句话给了我启示:

journalctl -xe命令查看服务启动失败的原因往往并不如人意,反而给了一种错误的暗示,

以为这个跟系统有关。其实,通过查看服务的日志,往往更能清晰的知道服务启动失败的原因。

服务配置文件/usr/lib/systemd/system/firewalld.service中提到会把日志输出到/var/log/messages文件中,查看之后并没有发现更多有用的信息。

systemd: Starting firewalld - dynamic firewall daemon...

systemd: firewalld.service: main process exited, code=exited, status=1/FAILURE

systemd: Failed to start firewalld - dynamic firewall daemon.

systemd: Unit firewalld.service entered failed state.

systemd: firewalld.service failed.

我需要更详细的日志信息,探索德治可以打开debug信息,编辑/etc/sysconfig/firewalld,将配置改为:

FIREWALLD_ARGS=--debug=10

然后我还修改/usr/lib/systemd/system/firewalld.service,修改了2行,这个文件貌似是不应该修改的,应该复制一份到/etc/systemd/system目录下再修改,下次注意:

StandardOutput=/var/log/firewalld

StandardError=/var/log/firewalld

然后需要重新载入服务:

systemctl daemon-reload

之后再重新启动firewalld,发现日志/var/log/messages中有了新变化,多了这个内容:

firewalld: Traceback (most recent call last):

firewalld: File "/usr/sbin/firewalld", line 29, in

firewalld: import dbus

firewalld: ImportError: No module named 'dbus'

这玩意儿怎么这么面熟呢?感觉在哪里见过。想起来了,上次yum-config-manager这个命令也报过类似的错误,原因是系统python默认指向的是python3,而实际依赖的是python2。

我迅速修改/usr/sbin/firewalld文件,将首行的/usr/bin/python改为/usr/bin/python2,问题顺利解决。

感觉自己又长进了不少,总结自己每一次解决问题的经历,也算是一种复盘,希望能指导自己不断进步。

最后,journalctl真不靠谱。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值