Systemd 及 Service 文件含义解析
#9733 VIP
Systemd 及 Service 文件含义解析joseph
· · 107 次点击 ·
·
开始浏览
其中的监视和控制功能的主要命令就是systemctl。
Systemd 有很多不同类型的使用单元,主要包括:系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)。一般我们常用的是其中的系统服务。
对于系统服务而言,比较重要的就是其中的 service 文件。我们先来看一个httpd.service文件,所在目录: /usr/lib/systemd/system/。其实单元文件可以从两个地方进行加载,优先级从低到高分别是:
* /usr/lib/systemd/system/ :软件包安装的单元
* /etc/systemd/system/ :系统管理员安装的单元
Httpd.service 文件样例:
`
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.targetnss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS-DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -kgraceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some timeto finish gracefully, but still want
# it to kill httpd after TimeoutStopSec ifsomething went wrong during the
# graceful stop. Normally, Systemd sendsSIGTERM signal right after the
# ExecStop, which would kill httpd. We aresending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
`
这个文件由三个部分组成:Unit、Service、Install。
[Unit] 主要是为了解决依赖关系。常见的添加 Requires、After,如果这个依赖是可选的,那么是 Wants、After。依赖关系通常被用在服务(service)而不是(target)上,所以上述的 httpd 所依赖的仅仅是一些 target,因而也就没有 Requires 和 Wants 出现。
[Service] 可选择几种不同的服务启动方式,启动方式通过Type参数进行设置。
* Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
* Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
* Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
* Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
* Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
修改现存单元文件
要更改由软件包提供的单元文件,先创建名为 /etc/systemd/system/ 单元名 .d/ 的目录(如/etc/systemd/system/httpd.service.d/),然后放入 *.conf文件,其中可以添加或重置参数。这里设置的参数优先级高于原来的单元文件。
例如,如果想添加一个额外的依赖,创建这么一个文件即可:
/etc/systemd/system/ unit .d/customdependency.conf
`
[Unit]
Requires= 新依赖
After= 新依赖
`
然后运行以下命令使更改生效:
`
# systemctl daemon-reload
# systemctl restart 单元
`
此外,把旧的单元文件从 /usr/lib/systemd/system/ 复制到/etc/systemd/system/,然后进行修改,也可以达到同样效果。
`systemctl enable 单元 `
在 /etc/systemd/system/ 目录中的单元文件的优先级总是高于 /usr/lib/systemd/system/ 目录中的同名单元文件。注意,当/usr/lib/ 中的单元文件因软件包升级变更时,/etc/ 中自定义的单元文件不会同步更新。此外,你还得执行 systemctl reenable unit ,手动重新启用该单元。因此,建议使用前面一种利用 *.conf 的方法。
可以使用 journalctl 来查看 systemd 管理服务的启动日志:
`
journalctl -b -0 # 显示本次启动的信息
journalctl -b -1 # 显示上次启动的信息
`
参考阅读 ArchLinux 的 Systemd (简体中文) 文档:https://wiki.archlinux.org/index.php/Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
107 次点击
加入收藏
相关文章
- 一文了解文件包含漏洞
- 织梦彻底解决“模板文件不存在,无法解析文档!”的问题
- BMP文件解析_图片分析
- linux 文件权限
- 【shell脚本】如何快速生成一个固定大小且内容随机的文件?
- mht文件图片解析工具(兼容Chrome/Blink)
- 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
- 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
- VisualStudio 禁用移动文件到文件夹自动修改命名空间功能
- MySQL8.0中的my.ini文件位置说明
- Maven让资源文件处理插件能够解析资源文件中的Maven属性详解程序员
- JVM 深入学习:Java 解析 Class 文件过程解析详解编程语言
- python文件操作(2017-8-5)详解编程语言
- php解析mpp文件中的多级任务详解编程语言
- Linux文件管理之使用操作命令(linux操作文件命令)
- 深入解析Linux文件系统及其管理方式(linux文件文件系统)
- 解析Linux swap文件:优化内存管理和提升系统性能(linuxswap文件)
- SQL Server数据库文件管理:后缀名称解析(sqlserver后缀名)
- Linux文件权限:第三段解析(linux文件权限第三段)
- 从csv文件到MySQL数据库简单而有效的数据迁移方案(.csv转mysql)
- Android中使用PULL方式解析XML文件深入介绍
- 解析PHP中如何将数组变量写入文件