今天我在试验中所介绍的搭建日志数据库的方法时,博文中要求在启动Apache服务时使用# /etc/init.d/httpd start或者# chkconfig httpd on,而实际在使用它们的时候却遇到了一些问题,下面是我在CentOS Linux release 7.0.1406 (Core)(使用cat /etc/cento-release查看) 下运行的结果:
(1)、/etc/init.d/httpd start
无法使用该命令启动,为了探究原因,我进入到/etc/init.d目录下后,可以看到该目录下包括:
只有很少的几个,而其中的README中介绍了为什么上面启动服务失败的原因:其内容为:
大意为:我们现在使用的是一个基于systemd的系统,在这个系统中传统的init脚本已经被本地(native:本地,原生)systemd服务文件所取代,该服务文件和init脚本提供了非常相似的功能。要使用服务文件只需要使用systemctl命令,它将会输出一系列所有当前正在运行的服务(和其他单元:其实就是服务),使用systemctl list-unit-files可以得到所有已知的单元/服务文件,包括停止的,禁用的和标记的,使用systemctl start来开始服务,使用systemctl stop来停止服务,更多的介绍参见systemctl(1);
而且传统的init脚本继续可用,一个初始化脚本/etc/rc.d/init.d/foobar(/etc/rc.d:控制不同的启动级别运行的服务的启动脚本)在系统初始化的时候隐式地被映射到服务单元foobar.service。
所以说centos关于系统的服务现在的控制方式是使用systemd来实现。
(2)chkconfig
而使用chkconfig来启动httpd的运行结果为:
可以看出其本身也是通过systemd来实现的,
而使用chkconfig httpd来查看httpd是否开启的结果为:
可看出仍然是通过systemctl实现的。
根据https://wiki.archlinux.org/index.php/Systemd_(简体中文)中的介绍,所有可用的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目录(后者优先级更高),更多systemd配置和功能的详细介绍可以到本文查看。
chkconfig --list的功能是列出所有的系统服务,在这里的运行结果为:
原因其自己也做了解释,我们可以看到列出的几个服务都是/etc/init.d中现有的服务;
(3)、关于systemd
这是http://www.zhihu.com/question/25873473(为什么systemd有如此大的争议中的一张图):
可以看出pstree打印出的进程数中systemd取代了传统init的位置。”再引用该文中的一段话:(对为什么反对systemd)变动太大,管理员认为没啥必要 之前的init用的好好的。各个软件有熟悉的配置。现在systemd干的活有点太多了,syslogd的工作也做,udevd的工作也做,连lxc的工作都想抢,自带nspawn,甚至霸道到要求只能通过systemd来管理cgroup。管理员们需要从头再学习如何配置linux,而且文档还很少,新的配置又令人很迷惑,比如pts的配置,想搞懂只能去读代码。我个人站在开发角度觉得systemd tm太难debug了,扯上个dbus,还要去研究dbus如何调试。“
更多详细的关于systemd的介绍:
https://wiki.archlinux.org/index.php/Systemd_(简体中文):是systemd的wiki详细介绍;
http://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html:IBM的浅析 Linux 初始化 init 系统,第 3 部分: Systemd;
http://www.zhihu.com/question/25873473:(知乎)systemd 为什么会有那么大的争议?
:Systemd的争议引起Debian社区分裂
http://zh.wikipedia.org/wiki/Systemd:是systemd的维基百科中的简短介绍