目录
一、了解服务
1、服务的本质
2、centos7的systemd的服务
3、service unit file配置文件的组成以及掌握常用选项
4、关于systemd管理的命令学习
5、运行级别
二、编译安装nginx,以及手写service配置文件,请看注释
编辑
一、了解服务
1、服务的本质
“服务”的本质是一种程序,“服务”分两种:
程序服务程序:对内,为保证计算机的正常运行,比如systemd,协助管理程序
用户服务程序:对外,给网络上用户提供各种功能,比如购物、游戏等,常见httpd
服务一般是后台运行,已准备随时调用
2、centos7的systemd的服务
centos 6采用init初始化进程,是一个一个串行启动
centos7采用systemd作为祖宗进程,systemd也是一种init程序,①解决依赖关系并行启动;②按需启动(根据服务配置设定启动)③负责在系统启动或者运行时,激活系统资源、服务进程等
systemd还提供叫醒服务,举例,安装rpcbind,将其关闭,然后用另一台主机进行探测连接,查看进程状态,实验看一下
systemd可以向后兼容sysvinit,systemd可以将多个程序进行单元管理,单元类型分类:
单元类型 | 扩展名 | 说明 |
Service | service | 描述一个系统服务软件(这是我们最需要知道的) |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Automount | .automount | 描述一个文件系统的自动挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | timer | 描述一个定时器 (用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .taget | 描述一组systemd的单元(我觉得可以理解为运行级别) |
3、service unit file配置文件的组成以及掌握常用选项
要知道,yum和rpm安装的时候系统,安装的是软件包,是已经写好了,会自动将service配置文件放到/usr/lib/systemd/system/这个文件夹中,让这个服务程序自动被systemd管理,但是编译安装是不会自动被管理,那么如果想要被systemd管理,则需要手动编写service配置文件。
这里拓展一下,systemd统一管理的好处:
1、对计算机而言,systemd有一套自己的启动、关闭等命令规则,这样可以套公式一样进行所有程序的管理,也可以理解为这是为了有一套制度,更好的调度计算机理解需求;
2、对于电脑面前的运维工程师,可以更好的去查看记忆程序状态,尤其是管理大量不同程序的情况下,可以统一规则。
关于配置文件的书写格式:
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
#service这一步非常非常重要!!!
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到
的一些选项
Unit段的常用选项 | |
Description | 描述信息(一般会写一个描述,等下看实操案例) |
After/Before | 自定义unit的启动顺序,表示当前unit应该晚于或者优先于哪些unit启动 |
Requires | 依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活 |
Wants | 依赖到的其它units,弱依赖 |
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通常是开机到最后才执行即可的服务 | |
notify | 在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息 | |
idle | 与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务 | |
EnvironmentFile | 环境配置文件 | |
ExecStart | 指明启动unit要运行命令或脚本的绝对路径(最最最重要) | |
ExecStartPre | ExecStart前运行 | |
ExecStartPost | ExecStart后运行 | |
ExecStop | 指明停止unit要运行的命令或脚本的绝对路径(最最最重要) | |
ExecReload | 指明程序重新加载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 | 安装本服务的时候还要安装别的相关服务 |
4、关于systemd管理的命令学习
命令 | 功能 |
systemctl start 软件名 | 开启进程 |
systemctl stop 软件名 | 关闭进程 |
systemctl status 软件名 | 查看进程状态 |
systemctl restart 软件名 | 重启进程(先关闭后启动) |
systemctl reload 软件名 | 重新加载(不关闭的状态下更新) |
systemctl enable 软件名 | 开机自启动 |
systemctl enable --now 软件名 | 开启自启动并现在启动 |
systemctl disable 软件名 | 开机不自启 |
systemctl disable --now 软件名 | 开机不自启并现在关闭 |
systemctl daemon-reload | 重新加载新服务,让系统识别 daemon是守护进程的意思 |
5、运行级别
运行级别 | Systemd的target | 说明 |
0 | target | 关机状态(也可以用poweroff关机) |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 与3的区别是不支持nfs功能。默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别(支持nfs) |
4 | multi-user.target | 保留的运行级别。默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动(也可以用reboot) |
查看当前的默认运行级别:systemctl get-default
修改默认运行级别:systemctl set-default 加运行级别英文表达式
查看当前运行级别:runlevel
[root@localhost ~]#runlevel
N 5
# N表示前一次的运行级别
# 5表示当前运行级别
[root@localhost ~]#init 3
[root@localhost ~]#runlevel
5 3
二、编译安装nginx,以及手写service配置文件,请看注释
cd /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#安装依赖环境
mkdir /apps/nginx -p
./configure --prefix=/apps/nginx
##检测安装环境,安装去指定目录,或者选择安装功能
##指明安装路径
make
##编译 将人类的高级语言翻译成二进制
make install
##将安装好的软件放入指定路径
ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
#做软链接
##手写service配置文件
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
#描述软件的功能,查看进程状态的时候,会有这一段描述
[Service]
PIDFile=/apps/nginx/logs/nginx.pid
#这里指明了这个pid号的配置文件存放位置,约定俗成一般存放在安装服务的logs中,以上nginx服务编译安装在/apps/nginx中,所以路径更改为/apps/nginx/logs/nginx.pid,一旦启动进程,nginx.pid文件会自动创建
ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动
ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程
ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载
[Install]
WantedBy=multi-user.target
安装在字符界面(3)
##结束以后加上 让系统识别到这个程序
systemctl daemon-reload