## systemd 特性
1. 启动系统的过程中实现了并行启动
2. 由systemd所管理的服务可以实现按需激活
3. 支持系统服务状态快照
4. 可以定义程序之间依赖关系
## unit介绍
unit的配置文件是uit的核心,在配置文件中主要包含
1. 需要管理服务或者程序
2. 服务或者程序需要监听的套接字
3. 保存的系统快照(就是制作快照的时候,系统中各个服务的状态)
4. 其他和init相关的配置
unit配置文件的位置
`/lib/systemd/system` 本地配置的系统单元
`/run/systemd/system` 运行时配置的系统单元
`/usr/lib/systemd/system` 第三方软件的系统单元(sshd,nginx..)
> 注意:unit(单元)和init中的服务脚本类似,但是不相同
## unit分类
### 类型1:
1. service unit,这是服务类型的unit,该类unit后缀是 .service,比如nginx.service,通过这个nuit可以实现启动、关闭、查看状态等
2. 该类unit位于 /usr/lib/systemd/system
3. 注意:unit本质上来说并不是脚本,而仅仅是systemd一个配置文件,因此这个unit文件不具有执行权限,而且也无法执行
4. 启动服务的方式:通过让systemd去读取配置文件中的内容,完成nginx进程的启动
### 类型2-8:
1. 类型2:device unit,这是设备unit,该类unit的后缀是.device,这类unit的作用是用来识别设备文件
2. 类型3:mount unit,后缀 .mount,用来实现挂载文件系统到指定的挂载点
3. 类型4:socket unit,后缀.socket,用来表示进程间通信的socket文件
4. 类型5:snapshot nuit:快照unit,后缀.snapshot, 用来管理快照
5. 类型6:target unit:目标unit,后缀是 .target,模拟centos5、6上的运行级别(主要是为了向后兼容)
6. 类型7:swap unit
7. 类型8:path unit
## systemctl使用
### 1.查看激活的服务
~~~
1.查看当前系统中全部已经被激活的unit:systemctl list-units --type service 2.查看当前系统中全部的unit(包括未激活的):systemctl list-units --type service --all
~~~
### 2.开机自启动和关闭
~~~
设置某个服务开机自启动:systemctl enable nginx.service
禁止某个服务开机自启动:systemctl disable nginx.service
~~~
> 设置开机自启动,其实就是在`/etc/systemd/system/multi-user.target.wants/`下创建执行`/usr/lib/systemd/system/`下的配置文件的软连接
~~~
查看当前系统中的全部unit的自动启动情况:systemctl list-unit-files
~~~
`disabled`:禁止开机自动启动
`enabled`:开机自动启动
`static`:该unit不能独立运行,是其他unit所依赖的
**表2:服务的启动、重启、停止等常用命令对比**
| System V init命令 | systemctl命令 | 作用 |
| --- | --- | --- |
| 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 | 查看服务状态 |
**表3:设置服务开机启动、不启动等常用命令对比**
| System V init命令 | systemctl命令 | 作用 |
| --- | --- | --- |
| 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 | 查看各个服务的启动与禁用情况 |
### 3.系统管理相关命令
**1. hostnamectl命令用于查看当前主机的信息。**
显示当前主机的信息
`hostnamectl`
设置主机名。
`hostnamectl set-hostname xuad1`
**2. localectl命令用于查看本地化设置。**
查看本地化设置
`localectl`
设置本地化参数。
~~~
localectl set-locale LANG=zh_CN.UTF-8
localectl set-keymap zh_CN
~~~
**3. timedatectl命令用于查看当前系统时区设置。**
查看当前时区设置
`timedatectl`
显示所有可用的时区
`timedatectl list-timezones`
设置当前时区
~~~
timedatectl set-timezone Asia/Shanghai
timedatectl set-time YYYY-MM-DD
timedatectl set-time HH:MM:SS
~~~
**4. loginctl命令用于查看当前登陆的用户。**
列出当前session
`loginctl list-sessions`
列出当前登录用户
`loginctl list-users`
列出显示指定用户的信息
`loginctl show-user root`