linux编写systemd下服务脚本
linux编写systemd 下服务脚本
Red Hat Enterprise Linux 7 (RHEL 7)已经将服务管理工具从SysVinit 和Upstart 迁移到
了 systemd 上,相应的服务脚本也需要改变。前面的版本里,所有的启动脚本都是放在
/etc/rc.d/init.d/ 目录下。这些脚本都是bash 脚本,可以让系统管理员控制这些服务的状态,
通常,这些脚本中包含了start,stop,restart 这些方法,以提供系统自动调用这些方法。但
是在RHEL 7 中当中已经完全摒弃了这种方法,而采用了一种叫unit 的配置文件来管理服务。
1. Systemd 下的unit 文件
Unit 文件专门用于systemd 下控制资源,这些资源包括服务(service)、套接字(socket) 、
设备(device)、挂载点(mount point) 、自动挂载点(automount point)、交换文件或分区(a swap
file or partition)…
所有的 unit 文件都应该配置[Unit]或者[Install]段. 由于通用的信息在[Unit]和[Install] 中
描述,每一个unit 应该有一个指定类型段,例如[Service]来对应后台服务类型unit.
1.1. unit 类型如下:
service :守护进程的启动、停止、重启和重载是此类 unit 中最为明显的几个类型。
socket :此类 unit 封装系统和互联网中的一个socket 。当下,systemd 支持流式, 数
据报和连续包的AF\_INET,AF\_INET6,AF\_UNIXsocket 。也支持传统的 FIFOs 传输模式。每
一个 socket unit 都有一个相应的服务 unit 。相应的服务在第一个“连接”进入 socket 或
FIFO 时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service) 。
device :此类 unit 封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则
标记的设备都将会在 systemd 中作为一个设备 unit 出现。udev 的属性设置可以作为配置
设备 unit 依赖关系的配置源。
mount :此类 unit 封装系统结构层次中的一个挂载点。
automount :此类 unit 封装系统结构层次中的一个自挂载点。每一个自挂载 unit 对
应一个已挂载的挂载 unit (需要在自挂载目录可以存取的情况下尽早挂载) 。
target :此类 unit 为其他 unit 进行逻辑分组。它们本身实际上并不做什么,只是引
用其他 unit 而已。这样便可以对 unit 做一个统一的控制。(例如:multi-user.target 相当于
在传统使用 SysV 的系统中运行级别5);bluetooth.target 只有在蓝牙适配器可用的情况下
才调用与蓝牙相关的服务,如:bluetooth 守护进程、obex 守护进程等)
snapshot :与 targetunit 相似,快照本身不做什么,唯一的目的就是引用其他 unit 。
2. 认识service 的unit 文件
2.1. 扩展名:.service
路径:
/etc/systemd/system/* ―――― 供系统管理员和用户使用
/run/systemd/system/* ―――― 运行时配置文件
/usr/lib/systemd/system/* ―――― 安装程序使用 (如RPM 包安装)
以 下 是 一 段 service unit 文 件 的 例 子 , 属 于
/usr/lib/systemd/system/NetworkManager.service 文件,它描述的是系统中的网络管理服务。
[Unit]
Descr