建设一个网站的好处,柳州旅游网站建设,网站域名变更怎么查询,网站的轮播怎么做文章目录前言一. systemd介绍二. service 脚本详解2.1 [Unit] 区块2.2 [Service] 区块2.3 [Install] 区块总结前言
init的进化经历了这么几个阶段#xff1a; CentOS 5: SysV init,串行 CentOS 6#xff1a;Upstart,并行#xff0c;借鉴ubuntu CentOS 7#xff1a;Syste…
文章目录前言一. systemd介绍二. service 脚本详解2.1 [Unit] 区块2.2 [Service] 区块2.3 [Install] 区块总结前言
init的进化经历了这么几个阶段 CentOS 5: SysV init,串行 CentOS 6Upstart,并行借鉴ubuntu CentOS 7Systemd,并行借鉴MAC
今天我们一起来看看systemd的使用
一. systemd介绍
Systemd新特性
(1)系统引导时实现服务并行启动服务间无依赖关系会并行启动
(2)按需激活进程若服务非立刻使用不会立刻激活处于半活动状态占用端口用时启动服务
(3)系统状态快照回滚到过去某一状态
(4)基于依赖关系定义服务控制逻辑
CentOS 7的服务systemctl脚本存放在/usr/lib/systemd/有系统 system 和用户 user 之分 即/usr/lib/systemd/system 和 /usr/lib/systemd/user
这里先说明一下unit的文件位置一般主要有三个目录
/lib/systemd/system/run/systemd/system/etc/systemd/system
这三个目录的配置文件优先级依次从低到高如果同一选项三个地方都配置了优先级高的会覆盖优先级低的。
系统安装时默认会将unit文件放在/lib/systemd/system目录。
如果想要修改系统默认的配置比如nginx.service一般有两种方法
1、在/etc/systemd/system目录下创建nginx.service文件里面写上我们自己的配置。
在/etc/systemd/system下面创建nginx.service.d目录在这个目录里面新建任何以.conf结尾的文件然后写入自己的配置。推荐这种做法。
2、/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录一般很少修改除非是修改程序运行时的一些参数时即Session级别的才在这里做修改。
而 在/usr/lib/systemd/system目录自动存放启动文件的配置位置里面一般包含有*.service的文件
[rootmufeng system]# pwd
/usr/lib/systemd/system
[rootmufeng system]# ls |head -2
abrt-ccpp.service
abrtd.service当我们利用systemctl 查看服务状态的时候就会出现/usr/lib/systemd/system/mysql.service我们用systemctl命令操作mysqld服务其实就是操作mysql.service文件调用该文件即可启动该服务。 上面的输出结果含义如下。
Loaded行配置文件的位置是否设为开机启动Active行表示正在运行Main PID行主进程IDStatus行由应用本身提供的软件当前状态(sshd这里没有)CGroup块应用的所有子进程日志块应用的日志
其他的服务有的有status比如httpd 二. service 脚本详解
我们打开ssh的.service来查看
[rootmufeng system]# cat sshd.service
[Unit]
DescriptionOpenSSH server daemon
Documentationman:sshd(8) man:sshd_config(5)
Afternetwork.target sshd-keygen.service
Wantssshd-keygen.service[Service]
Typenotify
EnvironmentFile/etc/sysconfig/sshd
ExecStart/usr/sbin/sshd -D $OPTIONS
ExecReload/bin/kill -HUP $MAINPID
KillModeprocess
Restarton-failure
RestartSec42s[Install]
WantedBymulti-user.target
可以看到service脚本是由三个部分组成的[Unit][Service] [Install]
2.1 [Unit] 区块
定义与Unit类型无关的通用选项用于提供unit的描述信息、unit行为及依赖关系等
所以这个板块负责启动顺序与依赖关系。
常用选项 Description描述信息意义性描述 After定义unit的启动次序表示当前unit应该晚于哪些unit启动其功能与Before相反 Requies依赖到的其它units强依赖被依赖的units无法激活时当前unit即无法激活 Wants依赖到的其它units弱依赖 Conflicts定义units间的冲突关系
在本文的截图中是sshd服务的相关配置有以下几个选项
Description字段给出当前服务的简单描述Documentation字段给出文档位置。
接下来的设置是启动顺序和依赖关系这部分比较重要
After字段表示如果network.target或sshd-keygen.service需要启动那么sshd.service应该在它们之后启动。
相应地还有一个Before字段定义sshd.service应该在哪些服务之前启动。
注意 After和Before字段只涉及启动顺序不涉及依赖关系
举例来说某 Web 应用需要 postgresql 数据库储存数据。在配置文件中它只定义要在 postgresql 之后启动而没有定义依赖 postgresql 。
上线后由于某种原因postgresql 需要重新启动在停止服务期间该 Web 应用就会无法建立数据库连接。
设置依赖关系需要使用Wants字段和Requires字段。 Wants字段表示sshd.service与sshd-keygen.service之间存在弱依赖关系即如果sshd-keygen.service启动失败或停止运行不影响sshd.service继续执行。 Requires字段则表示强依赖关系即如果该服务启动失败或异常退出那么sshd.service也必须退出。
注意Wants字段与Requires字段只涉及依赖关系与启动顺序无关默认情况下是同时启动的
2.2 [Service] 区块
Service区块定义如何启动当前服务
service 段的常用选项
Type用于定义影响ExecStart及相关参数的功能的unit进程启动类型类型种类simple默认。由ExecStart指明的进程所启动起来进程为主进程forking由ExecStart所启动的进程生成的一个子进程为主父进程退出oneshot一次性的启动后续的unit进程启动后该进程退出dbus仅在得到dbus之后才推出notify发送通知以后才能运行idle类似于simpleEnvironmentFile环境配置文件为ExecStart提供一些变量ExecStart指明启动unit要运行命令或脚本ExecStartPre, ExecStartPostExecStop指明停止unit要运行的命令或脚本Restart启动此项意外终止会自动重启脚本1. 启动命令
许多软件都有自己的环境参数文件该文件可以用EnvironmentFile字段读取。
EnvironmentFile字段指定当前服务的环境参数文件。
该文件内部的keyvalue键值对可以用$key的形式在当前配置文件中获取。
上面的例子中sshd 的环境参数文件是/etc/sysconfig/sshd。
配置文件里面最重要的字段是ExecStart。
ExecStart字段定义启动进程时执行的命令。
上面的例子中启动sshd执行的命令是/usr/sbin/sshd -D $OPTIONS
其中的变量OPTIONS就来自EnvironmentFile字段指定的环境参数文件。
与之作用相似的还有如下这些字段: ExecReload字段重启服务时执行的命令 ExecStop字段停止服务时执行的命令 ExecStartPre字段启动服务之前执行的命令 ExecStartPost字段启动服务之后执行的命令 ExecStopPost字段停止服务之后执行的命令
启动类型
Type字段定义启动类型。它可以设置的值如下
simple默认值ExecStart字段启动的进程为主进程forkingExecStart字段将以fork()方式启动此时父进程将会退出子进程将成为主进程oneshot类似于simple但只执行一次Systemd 会等它执行完才启动其他服务dbus类似于simple但会等待 D-Bus 信号后启动notify类似于simple启动结束后会发出通知信号然后 Systemd 再启动其他服务idle类似于simple但是要等到其他任务都执行完才会启动该服务。一种使用场合是为让该服务的输出不与其他服务的输出相混合
重启行为
service 区块有些字段定义了重启行为
KillMode字段定义 Systemd 如何停止 sshd 服务。
上面这个例子中将KillMode设为process表示只停止主进程不停止任何sshd 子进程即子进程打开的 SSH session仍然保持连接。
这个设置不太常见但对 sshd 很重要否则你停止服务的时候会连自己打开的 SSH session 一起杀掉.
KillMode字段可以设置的值如下。
control-group默认值当前控制组里面的所有子进程都会被杀掉process只杀主进程mixed主进程将收到 SIGTERM 信号子进程收到 SIGKILL 信号none没有进程会被杀掉只是执行服务的 stop 命令。
Restart字段定义了 sshd 退出后Systemd 的重启方式。
上面的例子中Restart设为on-failure表示任何意外的失败就将重启sshd。如果 sshd 正常停止比如执行systemctl stop命令它就不会重启.
Restart字段可以设置的值如下:
no默认值退出后不会重启on-success只有正常退出时退出状态码为0才会重启on-failure非正常退出时退出状态码非0包括被信号终止和超时才会重启on-abnormal只有被信号终止和超时才会重启on-abort只有在收到没有捕捉到的信号终止时才会重启on-watchdog超时退出才会重启always不管是什么退出原因总是重启
对于守护进程推荐设为on-failure。对于那些允许发生错误退出的服务可以设为on-abnormal。
RestartSec字段表示 Systemd 重启服务之前需要等待的秒数。上面的例子设为等待42秒。
2.3 [Install] 区块
Install区块定义如何安装这个配置文件即怎样做到开机启动。
WantedBy字段表示该服务所在的 Target。Target的含义是服务组表示一组服务。WantedBymulti-user.target指的是sshd 所在的 Target 是multi-user.target。
这个设置非常重要因为执行systemctl enable sshd.service命令时sshd.service的一个符号链接就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。
Systemd 有默认的启动 Target
systemctl get-default
multi-user.target
上面的结果表示默认的启动 Target 是multi-user.target。在这个组里的所有服务都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因
使用 Target 的时候systemctl list-dependencies命令和systemctl isolate命令也很有用。
# 查看 multi-user.target 包含的所有服务$ systemctl list-dependencies multi-user.target# 切换到另一个 target# shutdown.target 就是关机状态$ sudo systemctl isolate shutdown.target
一般来说常用的 Target 有两个一个是multi-user.target表示多用户命令行状态另一个是graphical.target表示图形用户状态它依赖于multi-user.target。
总结 好啦这就是今天要分享给大家的全部内容了我们下期再见 博客主页mufeng.blog.csdn.net 本文由沐风晓月原创首发于CSDN博客 全力以赴持续学习不负如来不负卿