centos7上systemd详解

centos7上systemd详解

发表于 2016-06-07 |  分类于 linux

CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多。

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:/usr/lib/systemd/system 和 /usr/lib/systemd/user

配置文件

这里我们先要说明一下unit的文件位置,一般主要有三个目录:

123
/lib/systemd/system/run/systemd/system/etc/systemd/system

这三个目录的配置文件优先级依次从低到高,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。 系统安装时,默认会将unit文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:

  1. /etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
  2. /etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法。

/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。

服务配置

每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],就以nginx为例吧,具体内容如下:

12345678910111213141516
[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target

[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.confExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true

[Install]WantedBy=multi-user.target

配置项说明

下面分别解释下着三部分的含义

[Unit]

  • Description : 服务的简单描述
  • Documentation : 服务文档
  • After= : 依赖,仅当依赖的服务启动之后再启动自定义的服务单元

[Service]

  • Type : 启动类型simple、forking、oneshot、notify、dbus

    • 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认为服务就绪。
  • PIDFile : pid文件路径
  • ExecStartPre :启动前要做什么,上文中是测试配置文件 -t
  • ExecStart:启动
  • ExecReload:重载
  • ExecStop:停止
  • PrivateTmp:True表示给服务分配独立的临时空间

[Install]

  • WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。

每一个.target实际上是链接到我们单位文件的集合,当我们执行

1
systemctl enable nginx.service

就会在 /etc/systemd/system/multi-user.target.wants/ 目录下新建一个 /usr/lib/systemd/system/nginx.service 文件的链接。

操作示例

下面是几个最常用的service操作:

1234567891011121314151617181920212223242526272829303132333435363738394041424344
# 自启动systemctl enable nginx.service# 禁止自启动systemctl disable nginx.service# 启动服务systemctl start nginx.service# 停止服务systemctl stop nginx.service# 重启服务systemctl restart nginx.service

# 查看Unit定义文件systemctl cat nginx.service# 编辑Unit定义文件systemctl edit nginx.service# 重新加载Unit定义文件systemctl reload nginx.service

# 列出已启动的所有unit,就是已经被加载到内存中systemctl list-units# 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unitsystemctl list-unit-files

# 查看服务的日志journalctl -u nginx.service    # 还可以配合`-b`一起使用,只查看自本次系统启动以来的日志

# 查看所有target下的unitsystemctl list-unit-files --type=target

# 查看默认target,即默认的运行级别。对应于旧的`runlevel`命令systemctl get-default

# 设置默认的targetsystemctl set-default multi-user.target

# 查看某一target下的unitsystemctl list-dependencies multi-user.target

# 切换target,不属于新target的unit都会被停止systemctl isolate multi-user.target

systemctl poweroff    # 关机systemctl reboot       # 重启systemctl rescue    # 进入rescue模式

参考资料

原文地址:https://www.cnblogs.com/libertylife/p/10531755.html

时间: 2024-12-09 09:01:54

centos7上systemd详解的相关文章

CentOS7/RHEL7 systemd详解

CentOS7/RHEL7 systemd详解 目录1. 为什么是systemd(1) 关于Linux服务管理(2) SysV init的优缺点(3) UpStart的改进(4) systemd的诞生(5)为什么systemd能做到启动很快2. SysV init介绍(1) 什么是SystemV(2)SysV init的运行级别(3)SysV init运行顺序(4)SysV init和系统关闭(5)SysV init的管理和控制功能3. systemd的特性(1)systemd解决了那些问题?(

CentOS7进程管理systemd详解

概述: 系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的文章中也做出过介绍.在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一起探讨一些关于CentOS7上的systemd的新特性的内容.具体分为一下几个方面: 1.systemd新特性简介 2.systemd如何管理系统系统上的各服务 3.systemd管理各个

Centos7 Systemd详解

 Centos7 Systemd详解 目录     一.systemd的由来     二.systemd     三.服务管理     1.systemctl2     2.服务查看     3.服务状态     4.hostnamectl     5.localectl     6. timedatectl     7.loginctl     四.unit     1.Unit类型     2.systemctl list-units命令可以查看当前系统的所有 Unit      3.uni

systemd详解详解

systemd详解 CentOS 7 使用systemd替换了SysV.Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务. systemd的特性有: 支持并行化任务 同时采用socket式与D-Bus总线式激活服务: 按需启动守护进程(daemon): 利用 Linux 的 cgroups 监视进程: 支持快照和系统恢复: 维护挂载点和自动挂载点: 各服务间基于依赖关系进行精密控制. systemd基本

Struts2之struts2文件上传详解

一.学习案例:通过在uploadfile.jsp页面填写完表单,提交后跳转到success.jsp页面,然后验证upload包下上传文件是否成功. 二.案例分析:struts2文件上传并不是表面上看的只需简单配置就可以上传文件.实际是分为两步的.1.struts2首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录,如果该键所对应的目录不存在,就会保存到javax.servlet.context.tempdir环境变量所指定的目录中.2.Action中所定义

JSch - Java实现的SFTP(文件上传详解篇) 转

JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序. 本文只介绍如何使用JSch实现的SFTP功能. SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式.SFTP是使用加密传输认证信息和传输

Systemd详解之单元配置systemd.unit

英文网址:https://www.freedesktop.org/software/systemd/man/systemd.unit.html 名称 systemd.unit - systemd 单元配置 概要 service.service, socket.socket, device.device, mount.mount, automount.automount, swap.swap, target.target, path.path, timer.timer, slice.slice,

centos7 zabbix搭建详解

大家好!应朋友要求,今天为大家献上centos7 zabbix的搭建详解话不多收先把今天需要的安装包献上https://pan.baidu.com/s/1hIbJUTYnPSLlhGpEGCkWQA无需密码永久有效!! 为了方便我们今天就用一台虚机,用一台虚拟机充当监控服务器和被监控服务器 第一步!!!关闭并永久关闭防火墙和SELinux 第二步!!!部署LAMP环境 应为我们的haHP写运行在Linux环境下的Apache下,调用的是MySQL数据库所以必须先部署环境 yum -y insta

CentOS 7 中 Systemd详解

一.systemd的由来 Linux一直以来采用init进程但是init有两个缺点: 1.启动时间长.Init进程是串行启动,只有前一个进程启动完,才会启动下一个进程.(这也是CentOS5的主要特征) 2.启动脚本复杂.Init进程只是执行启动脚本,不管其他事情.脚本需要自己处理各种情况,这使得脚本变得很长而且复杂. Init:   Centos 5 Sys init 是启动速度最慢的,串行启动过程,无论进程相互之间有无依赖关系.   Centos6 Upstart init 相对启动速度快一