systemd初始化进程(转)

Systemd初始化进程

Linux操作系统开机过程首先从BIOS开始→进入"Boot Loader"→加载内核→内核的初始化→启动初始化进程,初始化进程作为系统第一个进程,它需要完成相关的初始化工作,为用户提供合适的工作环境。

红帽RHEL7系统已经替换掉了大家熟悉的初始化进程System V init,并正式采用全新的初始化进程systemd。初始化进程systemd使用了并发启动机制,所以开机速度得到了不小的提升。虽然systemd已经表现出了优势,但一直有抵制的呼声:

吐槽1:因作者Lennart Poettering就职于红帽,让其他系统的粉丝很不爽。

吐槽2:systemd仅仅可在linux系统下运行,放弃了BSD用户。

吐槽3:接管了诸如syslogd、udev、cgroup等等服务的工作,不再甘心只做初始化进程。

吐槽4:使用systemd后RHEL7系统变化太大,参考文档又不多,为难我们啊!

不论怎么吐槽,既然红帽RHEL7系统选择了systemd,原先的inittab将已经不再起作用,也没有了“运行级别”这个概念,Linux系统启动时要做大量的初始化工作——例如挂载文件系统和交换分区,启动各类进程服务等等操作,这些都可以看作是一个个的单元(Unit),分析下nfs服务的单元配置文件吧:

[root@linuxprobe ~]# cat /etc/systemd/system/nfs.target.wants/nfs-lock.service
[Unit]
Description=NFS file locking service.
//表示rpcbind服务必须在nfs服务启动前已经运行。
Requires=rpcbind.service network.target
After=network.target named.service rpcbind.service
Before=remote-fs-pre.target
[Service]
Type=forking
StandardError=syslog+console
EnvironmentFile=-/etc/sysconfig/nfs
//启动nfs服务前需要执行的命令:
ExecStartPre=/usr/libexec/nfs-utils/scripts/nfs-lock.preconfig
//启动nfs服务具体的命令语法:
ExecStart=/sbin/rpc.statd $STATDARG
# Make sure lockd's ports are reset
ExecStopPost=-/sbin/sysctl -w fs.nfs.nlm_tcpport=0 fs.nfs.nlm_udpport=0
[Install]
WantedBy=nfs.target

如前面所述在红帽RHEL7系统中systemd用"目标(target)"代替了“运行级别”这个概念。

Sysvinit运行级别 Systemd目标名称 作用
0 runlevel0.target, poweroff.target 关机
1 runlevel1.target, rescue.target 单用户模式
2 runlevel2.target, multi-user.target 等同于级别3
3 runlevel3.target, multi-user.target 多用户的文本界面
4 runlevel4.target, multi-user.target 等同于级别3
5 runlevel5.target, graphical.target 多用户的图形界面
6 runlevel6.target, reboot.target 重启
emergency emergency.target 紧急Shell


将默认的运行级别修改为“多用户,无图形模式”:

[root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

将默认的运行级别修改为“图形化模式”:

[root@linuxprobe ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

对于学习过红帽RHEL6系统或已经习惯使用service、chkconfig等命令来管理系统服务的读者可能要郁闷一段时间了,因为在红帽RHEL7系统中管理服务的命令是"systemctl",但使用方法大致相同,我们来做下对比吧。

systemctl管理服务的启动、重启、停止、重载、查看状态的命令:

Sysvinit命令(红帽RHEL6系统) Systemctl命令(红帽RHEL7系统) 作用
service foo start systemctl start foo.service 启动服务
service foo restart systemctl restart foo.service 重启服务
service foo stop systemctl stop foo.service 停止服务
service foo reload systemctl reload foo.service 重新加载配置文件(不终止服务)
service foo status systemctl status foo.service 查看服务状态


systemctl设置服务的开机启动、不启动、查看各级别下服务启动状态的命令:

Sysvinit命令(红帽RHEL6系统) Systemctl命令(红帽RHEL7系统) 作用
chkconfig foo on systemctl enable foo.service 开机自动启动
chkconfig foo off systemctl disable foo.service 开机不自动启动
chkconfig foo systemctl is-enabled foo.service 查看特定服务是否为开机自启动
chkconfig --list systemctl list-unit-files --type=service 查看各个级别下服务的启动与禁用情况

posted @ 2016-09-25 09:18  岁月童话  阅读(615)  评论(0编辑  收藏  举报