CentOS7
--5--服务控制
目录
五、服务控制
[toc]
Systemd
Systemd
对linux来说,就是一个init
程序,可以作为sysVinit
和Upstat
的替代
RHEL7
监视和控制systemd
的主要命令是systemctl
,该命令可以用于查看系统状态和管理系统及服务。
RHEL7
的服务systemctl
脚本存放在:/usr/lib/systemd/
,有系统(system
)和用户(user
)之分,像需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system
目录下。每一个服务以.service
结尾,一般会分为3部分:[Unit]
、[Service]
和[Install]
[Unit]
[Unit]
部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别
[Service]
[Service]
部分是服务的关键,是服务的一些具体运行参数的设置,这里Type=forking
是后台运行的形式,PIDFile
为存放PID
的文件路径,ExecStart
为服务的具体运行命令,ExecReload
为重载命令,ExecStop
为停止命令,注意:[Service]
部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
[Install]
[Install]
部分是服务安装的相关设置,可设置为多用户的.
注意: 如果服务没有Install
段落,一般意味着应该通过其它服务自动调用它们
使用systemd
时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,服务A要求服务B在A启动之前运行。在此情况下,向服务A配置文件中的
[Unit]
段添加 Requires=B
和 After=B
即可
我们对service
和chkconfig
两个命令都不陌生,RHEL7
系统中systemctl
是管制服务的主要工具,它整合了chkconfig
与service
功能于一体。
systemctl
命令的基本操作格式是:
systemctl 动作服务名.service
查看一下--help
的信息
systemd
提供更优秀的框架以表示系统服务间的依赖关系实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,systemd
的目标是尽可能启动更少进程;尽可能将更多进程并行启动。
分析系统状态
systemctl 或systemctl list-units \#输出激活的单元
systemctl list-units --type=service \#列出active状态的服务
systemctl list-unit-files 列出所有已安装服务
systemctl --failed \#显示启动失败的服务
systemd-cgls以 树形列出正在运行的进程
所有可用的单元文件存放在/usr/lib/systemd/system/
和/etc/systemd/system/
目录(后者优先级更高)
使用单元:
一个单元可以是系统服务(.service
)、挂载点(.mount
)、sockets
(.sockets
)。
使用systemctl
控制单元时,通常需要使用单元文件的全名,包括扩展名(例如sshd.service
)。但是有些单元可以在systemctl
中使用简写方式。如果无扩展名,systemctl
默认把扩展名当作 .service
。例如sshd
和sshd.service
是等价的。
挂载点会自动转化为相应的 .mount
单元。例如 /home
等价于home.mount
。
设备会自动转化为相应的.device
单元,所以/dev/sda2
等价于dev-sda2.device
。
systemctl
常用命令
命令 | 作用 |
---|---|
systemctl start <单元> |
立即启动单元 |
systemctl stop <单元> |
立即停止单元 |
systemctl restart <单元> |
重启单元 |
systemctl reload <单元> |
重新读取单元配置 |
systemctl status <单元> |
输出单元运行状态 |
systemctl is-enabled <单元> |
检查单元是否配置为自动启动 |
systemctl enable <单元> |
开机自动启动单元 |
systemctl disable <单元> |
取消开机自动激活单元 |
systemctl is-active<单元> |
查看单元是不是正在运行 |
systemctl daemon-reload |
重新载入 systemd,扫描新的或有变动的单元 |
电源管理:
systemctl reboot \#重启
systemctl poweroff \#退出系统并停止电源
例如:
systemctl is-enabled iptables.service
命令 | 作用 |
---|---|
systemctl is-enabled servicename.service |
查询服务是否开机启动 |
systemctl enable *.service |
开机运行服务 |
systemctl disable *.service |
取消开机运行 |
`systemctl start *.service | 启动服务 |
`systemctl stop *.service | 停止服务 |
systemctl restart *.service |
重启服务 |
`systemctl reload *.service | 重新加载服务配置文件 |
systemctl status *.service |
查询服务运行状态 |
systemctl mask *.service |
禁用指定服务 |
systemctl unmask *.service |
激活指用服务 |
注:*
代表某个服务的名字,如http
的服务名为httpd
案例:
查看服务的状况
停止sshd
服务,查看状态
状态表示为dead
服务已经停止。
disable
服务,禁止开机自动运行
开机自动加载,并启动该服务
通过mask
来禁用该服务,这样一旦服务终止,则无法再启动,必须通过unmask
解除禁用才能使用systemctl start sshd
来运行服务
除了上面提到的基本功能,systemctl
还可以查询当前加载的模块单元,注意后缀为service
的才是我们需要管理的服务
可以通过type
来过滤掉其他类型的单元
systemctl list-unit-files –type service