马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
比方:ehigh-CheckReplication.service 服务的 service 设置文件
- [Unit]
- Description=My Redis & MySQL Monitor Script
- After=network.target
- Wants=network.target
- [Service]
- Type=simple
- ExecStart=/bin/bash /home/ehigh/work/job/check_replication.sh 10.0.28.5
- Restart=always
- RestartSec=3
- User=root
- [Install]
- WantedBy=multi-user.target
复制代码 shell 脚本实验的具体流程先容
shell 脚本的实验流程是先创建shell 历程(如:bash 历程),再由该 历程分析并实验shell 脚本,脚本竣事后,shell 历程随即退出。
这里指定的是通过 /bin/bash 启动一个 bash 历程,然后再由 bash 历程去分析该路径下的脚本。
实验 systemctl start ehigh-CheckReplication.service 时
systemd 会根据 ExecStart 指定的下令来启动历程,由于使用的是 simple 模式,以是只要 ExecStart 指定的下令能乐成创建历程,也就是 bash 历程能被乐成创建,则以为该服务乐成启动。
/bin/bash 背面具体的脚本是 bash 的参数,是 bash 历程启动后要分析处置惩罚的内容,simple 模式下,systemd 只关心 /bin/bash 下令可否正常启动历程。
systemd 是怎样监控某个 service 对应的历程是否正常运行
待启动乐成后,systemd 会将 ExecStart 启动的历程作为该服务的主历程(MAIN PID)举行管理,并根据设置(如 Restart 等计谋)监控该历程的运行状态。
意思就是 systemd 会不停盯着 MAIN PID 对应的历程是否存在,只要该历程存在,systemd 就以为该服务对应的历程仍在运行,此时使用 systemctl status 查察服务状态通常体现为:active (running)
若 systemd 发现 MAIN PID 对应的历程已经退出,此时 systemd 会根据 service 的设置(比方 Restart 计谋)决定是否重新启动该服务或将服务状态标记为失败。
实验 systemctl stop ehigh-CheckReplication.service 克制服务的两种方式
方式一: service 设置文件中通过 ExecStop 指令指定了克制下令,systemd 会实验 ExecStop 指定的下令来克制服务。
方式二:service 设置文件中没有指定 ExecStop 指令,systemd 会默认向该服务的主历程(MAIN PID)发送 15 信号优雅退出。在 TimeoutStopSec 指定的时间内历程仍未退出,会再发送 9 信号欺压停止
实验 systemctl enable ehigh-CheckReplication.service 设置开机自启动
本质就是将该 service 服务设置为某个 target 的依赖服务,待对应 target 启动时会将该服务一起启动。该功能是通过 service 设置文件中的 [Install] 段实现的。在 [Install] 段中通常会设置:WantedBy=multi-user.target。
multi-user.target 功能上大抵相称于传统 Linux 中的 运行级别 3(Runlevel 3),也就是服务器模式或下令行模式,但是又略有差别,差别点在于 target 具有依赖关系。
传统运行级别下,假设设置了体系启动后的运行级别是3,则内核初始化完成后,PID 为 1 的 历程 system V 会启动运行级别 3 对应的一组服务。
今世 systemd,假设设置的是 graphical.target(图形界面),也就是终极会进入图形界面,要启动该 target 依赖的相干服务时,因 graphical.target 依赖 multi-user.target。 故而 PID 为 1 的历程 systemd 会先启动 multi-user.target 所需的相干服务,再启动图形界面相干服务。
在实验 systemd enable 时,systemd 会在 /etc/systemd/system/multi-user.target.wants/ 目次中创建一个指向该 service 文件的符号链接,使该 service 成为 multi-user.target 的依赖服务。
实验 systemctl status ehigh-CheckReplication.service 的相干信息
- 第一行:服务名称 - Description 指定的形貌信息
- 第二行:loaded(xxx):体现 xxx 路径下的设置文件已经加载; enabled 体现已设置开机自启动;vendor preset: enabled 体现体系默认发起也是启用,vendor preset 根本不消管。
- 第三行:Active:体现服务状态,这里是正常运行;since 体现什么时间启动的; 16h ago 体现已经运行了16 小时。
- 第四行:Main PID:systemd 以为的 主历程,也就是设置文件中通过ExecStart指定下令启动的历程
- 第五行:Tasks:体现这个service 如今有几个历程,这里是两个历程。
- 第六行:Memory:这里体现这个 service 使用了 4.9MB内存
- 第七行:CGroup 历程树,systemd 会把服务放到一个 cgroup 里同一管理,这也是为啥 systemd stop 能杀掉全部子历程
- 最下面:是日记输出
service 定名规则和设置文件存放路径分析
service 的设置文件要求必须是 .service 末了,但使用 systemctl 时可以不写 .service 。
service 的设置文件存储路径一样平常有两个:
- /usr/lib/systemd/system/ 或 /lib/systemd/system/: 这个是软件安装包相干service 文件的默认存放路径。
- /etc/systemd/system/:这个一样平常是用来放自己自界说的一些service 设置文件的。
|