在 Linux
中,无论何时当你安装任何带有服务和守护进程的包,系统默认会把这些服务的初始化及 systemd
脚本添加进去,不过此时它们并没有被启用。
我们需要手动的开启或者关闭那些服务。Linux
中有三个著名的且一直在被使用的初始化系统。
在以Linux/Unix
为基础的操作系统上,init
(初始化的简称) 是内核引导系统启动过程中第一个启动的进程。
init
的进程id (pid)
是1
,除非系统关机否则它将会一直在后台运行。
init
首先根据 /etc/inittab
文件决定Linux
运行的级别,然后根据运行级别在后台启动所有其他进程和应用程序。
BIOS
、MBR
、GRUB
和内核程序在启动init
之前就作为 Linux
的引导程序的一部分开始工作了。
下面是 Linux
中可以使用的运行级别(从0~6
总共七个运行级别):
下面是 Linux 系统中最常用的三个初始化系统:
System V(Sys V)
Upstart
systemd
System V(Sys V)
是类Unix
系统第一个也是传统的初始化系统。init
是内核引导系统启动过程中第一支启动的程序,它是所有程序的父进程。
大部分Linux
发行版最开始使用的是叫作 System V(Sys V)
的传统的初始化系统。在过去的几年中,已经发布了好几个初始化系统以解决标准版本中的设计限制,例如:launchd
、Service Management Facility
、systemd
和 Upstart
。
但是systemd
已经被几个主要的 Linux
发行版所采用,以取代传统的 SysV
初始化系统。
Upstart
是一个基于事件的/sbin/init
守护进程的替代品,它在系统启动过程中处理任务和服务的启动,在系统运行期间监视它们,在系统关机的时候关闭它们。
它最初是为 Ubuntu
而设计,但是它也能够完美的部署在其他所有Linux
系统中,用来代替古老的 System-V
。
Upstart
被用于 Ubuntu 9.10
到 Ubuntu 14.10
和基于 RHEL 6
的系统,之后它被systemd
取代。
systemd
是一个新的初始化系统和系统管理器,它被用于所有主要的 Linux
发行版,以取代传统的SysV
初始化系统。
systemd
兼容SysV
和LSB
初始化脚本。它可以直接替代SysV
初始化系统。systemd
是被内核启动的第一个程序,它的PID
是1
。
systemd
是所有程序的父进程,Fedora 15
是第一个用systemd
取代upstart
的发行版。systemctl
用于命令行,它是管理 systemd
的守护进程/服务的主要工具,例如:(开启、重启、关闭、启用、禁用、重载和状态)
systemd
使用 .service
文件而不是bash
脚本(SysVinit 使用的)。systemd
将所有守护进程添加到 cgroups
中排序,你可以通过浏览/cgroup/systemd
文件查看系统等级。
service
命令,顾名思义,就是用于管理Linux
操作系统中服务的命令。
这个命令不是在所有的linux
发行版本中都有。主要是在redhat
、fedora
、mandriva
和centos
中。
查看所有服务当前的运行状态 service --status-all 查看指定服务(vsftpd)的运行状态 service vsftpd status 停止指定服务(vsftpd) service vsftpd stop 重启网络服务 service network restart
chkconfig
实用程序是一个命令行工具,允许你在指定运行级别下启动所选服务,以及列出所有可用服务及其当前设置。
此外,它还允许我们从启动中启用或禁用服务。前提是你有超级管理员权限(root
或者sudo
)运行这个命令。
所有的服务脚本位于/etc/init.d
文件中
设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭 chkconfig --level 35 mysqld on 设定mysqld在各等级为on,“各等级”包括2、3、4、5等级 chkconfig mysqld on 修改服务的默认启动等级 chkconfig --level 35 mysqld on
systemd
核心概念unit
(单元)类型:unit
表示不同类型的systemd
对象,通过配置文件进行标识和配置;
文件中主要包含了系统服务
、监听socket
、保存的系统快照
以及其它与init相关的信息
下面为unit类型 :
service
:文件扩展名为.service
, 用于定义系统服务
target
:文件扩展名为.target
,用于模拟实现运行级别
device
:用于定义内核识别的设备
mount
:定义文件系统挂载点
socket
:用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动
snapshot
:管理系统快照
swap
:用于标识swap设备
automount
:文件系统的自动挂载点
path
:用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务
么如何查看这些类型呢?
可以使用-t
加上类型去查看,以service
为例
ststemctl -t service
/usr/lib/systemd/system/
:每个服务最主要的启动脚本的配置放在这,有点类似以前的/etc/init.d
;/run/systemd/system/
:系统执行过程中所产生的服务脚本所在目录,这些脚本的优先级要比/usr/lib/systemd/system/
高;/etc/systemd/system/
:管理员根据主机系统的需求所创建的执行脚本所在目录,执行优先级比/run/systemd/system/
高;从上面的功能及优先级次序,我们可以知道,/etc/systemd/system/
目录下的相关配置,决定系统了会不会执行某些服务,所以该目录下面一般放着一大堆链接文件。而/usr/lib/systemd/system
/下,则放着实际执行的systemd
启动脚本配置文件。因此如果你想要修改某个服务启动的设置,应该去/usr/lib/systemd/system/
下面修改。/etc/systemd/system/
仅是链接到正确的执行脚本配置文件而已。所以想要看执行脚本设置,应该就得要到/usr/lib/systemd/system/
去查阅。
任务 | 旧指令 | 新指令 |
---|---|---|
使某服务自动启动 | chkconfig --level 3 httpd on | systemctl enable httpd.service |
使某服务不自动启动 | chkconfig --level 3 httpd off | systemctl disable httpd.service |
检查服务状态 | service httpd status | systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active) |
显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
启动某服务 | service httpd start | systemctl start httpd.service |
停止某服务 | service httpd stop | systemctl stop httpd.service |
重启某服务 | service httpd restart | systemctl restart httpd.service |
查看服务状态
systemctl status httpd
运行状态:
active(running)
:正有一只或多只程序正在系统中执行的意思;active(exited)
:仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行;active(waiting)
:正在执行当中,不过还需要等待其他的事件才能继续处理;inactive
:这个服务目前没有运行;dead
:程序已经清除;启动状态:
enabled
:这个daemon
将在开机时被执行;disabled
:这个daemon
在开机时不会被执行;static
:这个daemon
不可以自己启动(enable
不可),不过可能会被其他的enabled
的服务来唤醒(关联属性的服务);mask
:这个daemon
无论如何都无法被启动,因为已经被强制注销(非删除),可通过systemctlunmask
方式改回原本状态;检查服务的所有配置详细信息
systemctl show httpd
查看各服务开机自启情况
systemctl list-unit-files --type=service
获取服务的依赖项列表
systemctl list-dependencies httpd.service
按层次列出控制组
systemd-cgls
根据CPU,内存,输入和输出列出控制组
systemd-cgtop
分析每个进程在引导时花费的时间
systemd-analyze blame
列出所有可用的系统套接字
systemctl list-unit-files --type=socket
套接字的操作
systemctl start cups.socket #启动套接字 systemctl restart cups.socket #重启套接字 systemctl stop cups.socket #停止套接字 systemctl reload cups.socket #重新加载套接字 systemctl status cups.socket #查看套接字状态 systemctl is-active cups.socket systemctl enable cups.socket systemctl disable cups.socket
其他命令
systemctl mask httpd.service #禁用某个服务 systemctl unmask httpd.service #解除禁用某个服务 systemctl isolate multi-user.target #将目前的操作环境改为纯文本模式,关掉图形界面 systemctl isolate graphical.target #将目前的操作环境改为图形界面 systemctl poweroff # 系统关机 systemctl reboot # 重新开机 systemctl suspend # 进入暂停模式 systemctl hibernate # 进入休眠模式 systemctl rescue # 强制进入救援模式 systemctl emergency # 强制进入紧急救援模式
systemctl 命令详解及使用教程
详细讲解systemctl(附常用指令)
运维——centos 7 systemctl用法
Linux服务管理: chkconfig 和 systemctl 命令
linux service命令常见使用方法
Linux下chkconfig命令详解