服务
1.systemd服务的简要介绍
(1)对比5 6 可以解决依赖关系并行启动
(2)按需启动
(3)自动解决依赖关系
负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
2.Systemd新特性
1.系统引导时实现服务并行启动,2.按需启动守护进程,3.自动化的服务依赖关系管理,4.同时采用socket式与D-Bus总线式激活服务,5.socket与服务程序分离,6.向后兼容sysv init脚本,7.使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,8.systemctl无法与之通信和控制,9.系统状态快照
systemd 核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听
socket、保存的系统快照以及其它与init相关的信息
3.systemd管理的程序
(1)系统必要的程序
(2)yum rpm 安装的程序
(3)编译安装的程序,需要手写配置文件后才可以
4.Systemd单元类型
单元类型 | 护展名 | 说明 |
Service | .service | 描述一个系统服务软件 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automoun | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Path | .path | 描述一个文件系统中文件或目录(path 路径) |
Snapshot | .snapshot | 用于保存一个systemd的状态(snapshot 快照) |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述一组systemd的单元(target 目标) |
5.systemctl 常用命令
命令 | 说明 |
systemctl start 服务名 | 开启服务 |
systemctl stop 服务名 | 关闭服务 |
systemctl status 服务名 | 查看服务状态 |
systemctl restart 服务 | 重启服务 |
systemctl reload 服务 | 重启加载服务,不影响客户使用 |
systemctl enable 服务 | 开机自启 |
systemctl disable 服务 | 关闭开机自启 |
systemctl enable --now 服务 | 开机自启,并立即启动 |
systemctl disable --now 服务 | 关闭开机自启,并立即关闭 |
systemctl damon - reload | 加载新服务让系统识别 |
6.运行级别
运行级别所对应的Systemd目标
运行级别 | Systemd的target | 说明 |
0 | target | 关机状态,使用该级别时会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别。默认等同于3 |
5 | garphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
runlevel 查看目前的运行级别
[root@localhost ~]# runlevel
N 5
N:代表没有切换过级别
5:图形界面,当前级别
输入init 3
7.service unit 文件格式
unit 格式说明:
(1)以 “#” 开头的行后面的内容会被认为是注释
(2)相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
(3)时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明
service unit file文件通常由三部分组成:
(1)[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
(2)[Service]:与特定类型相关的专用选项;此处为Service类型
(3)[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
Unit段的常用选项:
(1)Description:描述信息
(2)After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
(3)Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
(4)Wants:依赖到的其它units,弱依赖
(5)Conflicts:定义units间的冲突关系
Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
* simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
*forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
*oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
*dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
*notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
*idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指
定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务
8.实验
使得nginx能够被systemd管理
8.1 centos6,使用chkconfig
(1)编译安装
(2)建立软连接
(3)编辑脚本,添加权限,将nginx服务加入
脚本:
#!/bin/bash
#chkconfig: - 99 20
#description:Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in
start) $PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop $0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*) echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
8.2centos7 使用systemctl
(1)编译安装
(2)建立软链接
(3)编写配置文件
vim /lib/systemd/system/nginx.service
(4)加载新服务让系统识别,并开关服务查看服务状态