## Unit相关命令
**Systemd可以管理所有系统资源。不同的资源统称为Unit(单位),Unit一共分成12种。**
~~~
Service unit:系统服务
Target unit:多个Unit构成的一个组
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点
Path Unit:文件或路径
Scope Unit:不是由Systemd启动的外部进程
Slice Unit:进程组
Snapshot Unit:Systemd快照,可以切回某个快照
Socket Unit:进程间通信的socket
Swap Unit:swap文件
Timer Unit:定时器
~~~
**systemctl list-units命令可以查看系统的所有Unit信息。**
列出已启动的Unit
`systemctl list-units`
列出所有Unit,包括没有找到配置文件的或者启动失败的
`systemctl list-units --all`
列出所有没有启动的Unit
`systemctl list-units --all --state=inactive`
列出所有启动失败的Unit
`systemctl list-units --failed`
列出所有正在运行的、类型为service的Unit
`systemctl list-units --type=service`
**systemctl status命令用于查看系统状态和单个Unit的状态。**
显示系统状态
`systemctl status`
显示单个 Unit 的状态
`sysystemctl status httpd.service`
显示远程主机的nginx服务的状态
`systemctl -H root@192.168.2.204 status nginx.service`
除了status外,systemctl还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。
显示某个 Unit 是否启动
`systemctl is-active application.service`
显示某个 Unit 是否启动失败
`systemctl is-failed application.service`
显示某个 Unit 服务是否开机启动
`systemctl is-enabled application.service`
**systemctl常用命令**
立即启动一个服务
`systemctl start httpd.service`
立即停止一个服务
`systemctl stop httpd.service`
重启一个服务
`systemctl restart httpd.service`
杀死一个服务的所有子进程
`systemctl kill httpd.service`
重新加载一个服务的配置文件
`systemctl reload httpd.service`
重载所有修改过的配置文件
`systemctl daemon-reload`
显示某个 Unit 的所有底层参数
`systemctl show httpd.service`
显示某个 Unit 的指定属性的值
`systemctl show -p CPUShares httpd.service`
设置某个 Unit 的指定属性
`systemctl set-property httpd.service CPUShares=500`
Unit的后缀名.service可以省略,例如启动ssh的命令systemctl start sshd.service可以写成systemctl start sshd。
Unit之间存在依赖关系,A依赖于B,就意味着systemd在启动A的时候,同时会去启动B。
**systemctl list-dependencies命令列出一个Unit的所有依赖。**
`systemctl list-dependencies nginx.service`
上面命令的输出结果之中,有些依赖是Target类型,默认不会展开显示。如果要展开Target,就需要使用--all参数。
`systemctl list-dependencies --all nginx.service`
**systemctl list-unit-files命令用于列出所有Unit的状态。**
列出所有Unit状态
`systemctl list-unit-files`
列出指定类型的Unit状态
`systemctl list-unit-files --type=service`
Unit的四种状态
~~~
enabled:开机启动
disabled:不开机启动
static:该Unit没有[Install]部分(无法执行),只能作为其他Unit的依赖
masked:该Unit被禁止开机启动
~~~
如果修改了某个服务的配置文件,就要重新加载配置,然后重新启动,否则修改不会生效。
~~~
systemctl daemon-reload
systemctl restart httpd.service
~~~
**系统运行模式target相关命令**
查看当前系统的所有Target
`systemctl list-unit-files --type=target`
查看一个 Target 包含的所有Unit
`systemctl list-dependencies multi-user.target`
查看启动时的默认Target
`systemctl get-default`
设置启动时的默认Target
`systemctl set-default multi-user.target`
切换Target时,默认不关闭前一个Target启动的进程,systemctl isolate命令改变这种行为,关闭前一个Target里面所有不属于后一个Target的进程
`systemctl isolate multi-user.target`