Simple Systemd Service Guide

主题

  • Systemd介绍
  • Systemd基本操作
  • 怎样编写_service_.service文件
  • 怎样部署service

Systemd介绍

  • Linux OS的系统和服务管理者
  • 兼容SysV初始化脚本(init scripts)
  • 提供如下功能特性:
    • 系统启动时系统服务的并行启动
    • Daemon程序的按需激活
    • 支持系统状态快照(snapshots)
    • 基于依赖的服务控制逻辑
  • systemd取代RHL7的Upstart,作为默认的init系统

Systemd基本操作

  • 启动服务

    systemctl start name.service

  • 停止服务

    systemctl stop name.service

  • 重启服务

    systemctl restart name.service

  • 重载配置

    systemctl reload name.service

  • 检查服务状态

    systemctl status name.service

  • 输出所有服务状态

    systemctl list-units --type service --all

  • 使能服务

    systemctl enable name.service

  • 禁止服务

    systemctl disable name.service

  • 列出所有服务并检查是否使能

    systemctl list-unit-files --type service

怎样编写name.service文件

name.service文件组成

  • [Unit]

    • 包含一般的选项,不依赖于单元类型(unit type)
    • 选项:提供单元描述,指定单元行为,设置对其他单元的依赖关系
  • [unit type]
    • 如果一个单元有特定的指令,则这些指令被组合在以单元类型命名的块下。
      比如,service单元文件包含在[Service]块中。
  • [Install]
    • 包含systemctl enable和disable命令使用的单元安装信息

重要的[Unit]块选项

  • Description

    单元有意义的描述信息,systemctl status命令输出中显示该文本信息。

  • Documentation

    提供该单元的URI引用文件列表。

  • After

    定义单元的启动顺序。该单元只在After指定的单元处于激活状态后才启动。

    Before选择与After功能相反。

  • Requires

    配置与其他单元的依赖关系。在Requires中的单元与该单元一起激活。

    如果任何需要的单元启动失败,这个单元就不会被激活。

  • Wants

    配置比Requires弱的依赖关系。

    如果任何列出的单元没有成功启动,也不会影响该单元的激活。

    建议用于建立定制单元依赖关系。

  • Conflicts

    配置反向的依赖关系,即与Requires配置相反的依赖。

重要的[Service]块选项

  • Type

    配置单元启动类型。影响ExecStart和其他相关选项的功能。

  • simple

    默认选项。ExecStart启动的进程为服务的主进程。

  • forking

    ExecStart启动的进程创建一个子进程作为服务的主进程。启动完成后父进程退出。

  • oneshot

    与simple相似,但是在启动后续的单元之前进程退出。

  • dbus

    与simple相似,但是仅在主进程得到D-bus名称之后才启动后续的单元。

  • notify

    与simple相似,但是仅在通过sd_notify()函数发送通知消息后才启动后续的单元。

  • idle
    与simple相似,但是直到所有job完成后,才真正执行服务的二进制程序,这避免与服务shell的状态输出信息混淆。

  • ExecStart

    当单元启动时,执行该选项指定的命令或脚本。

  • ExecStop

    当单元停止时,执行该选项指定的命令或脚本。

  • ExecReload

    当单元重装时,执行该选项指定的命令或脚本。

  • Restart

    如果该选项使能,当服务进程退出时,服务重启。作为systemctl stop命令的异常处理。

  • RemainAfterExit

    如果该选项设置为True,即使服务所有的进程退出,这个服务也被认为处于激活状态(active)。
    默认是False。
    当Type=oneshort配置时,这个选项有特殊的用处。

重要的[Install]块选项

  • Alias

    提供单元的额外名称,以空格隔开。除了systemctl enable,大部分sytemctl命令可以使用别名带去真正的单元名称。

  • RequiredBy

    依赖于该单元的其他单元列表。
    当该单元使能时,RequiredBy中的单元就会生成依赖于该单元的Require依赖关系。

  • WantedBy

    弱依赖于该单元的其他单元列表。
    当该单元使能时,WantedBy中的单元就会生成依赖于该单元的Want依赖关系。

  • Also

    指定和该单元一起安装或卸载的其他单元列表。

  • DefaultInstance

    限定的实例化单元。即该选项指定了该单元使能的默认实例。
    Limited to instantiated units, this option specifies the default instance for which the unit is enabled.

例子:自定义中断绑核服务

[Unit]
Description=Configure common_affinity service for system!
After=network.target

[Service]
Type=oneshot
ExecStart=/etc/init.d/common_affinity
ExecStop=/home/zxuss/affinity/superstop.sh
RemainAfterExit=True

[Install]
WantedBy=multi-user.target

怎样部署service

以自定义中断绑核服务为例子:

1.将name.service文件拷贝到/usr/lib/systemd/system/目录下
cp -f ${work_path}/common_affinity.service /usr/lib/systemd/system/

2.将服务启动脚本拷贝到/etc/init.d/目录,或者其他目录
cp -f ${work_path}/common_affinity /etc/init.d/

3.如果已经部署了name.service服务,则先禁止该服务,然后重新使能该服务
systemctl disable common_affinity.service
systemctl reenable common_affinity.service

4.如果没有部署过name.service服务,则直接使能name.service服务
systemctl enable common_affinity.service

参考文档:

Managing Services with systemd

systemd.service — Service unit configuration

How To Use Systemctl to Manage Systemd Services and Units

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

Linux Simple Systemd Service Guide的更多相关文章

  1. .NET Worker Service 部署到 Linux 作为 Systemd Service 运行

    上一篇文章我们了解了如何将.NET Worker Service 作为 Windows 服务运行,今天我接着介绍一下如何将 Worker Service 部署到 Linux 上,并作为 Systemd ...

  2. systemd.service 中文手册

    版权声明 本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文译者不保证译文内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用:任何人都可以自 ...

  3. 如何编写一个Systemd Service(转)

    转自 https://segmentfault.com/a/1190000014740871 0x01 什么是Systemd Service Systemd 服务是一种以 .service 结尾的单元 ...

  4. Systemd: Service File Examples

    大多数Linux发行版使用 systemd作为系统服务管理工具. systemctl是systemd的主要命令,用于管理控制服务. 这篇文章中将介绍如何创建允许你使用systemctl命令的sysyt ...

  5. Linux之systemd服务配置及自动重启

    layout: post title: Linux之systemd服务配置及自动重启 date: 2019-09-09 tags: linux --- Linux之systemd服务配置及自动重启 0 ...

  6. HTTPSQS(HTTP Simple Queue Service)消息队列

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  7. systemd.service — 服务单元配置

    转载:http://www.jinbuguo.com/systemd/systemd.service.html 名称 systemd.service - 服务单元配置 大纲 service.servi ...

  8. systemd service

    Man page systemd.unit SYSTEMD.UNIT(5) systemd.unit SYSTEMD.UNIT(5) NAME systemd.unit - Unit configur ...

  9. CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制

    遇到的问题: golang程序一直出现 too many open files的报错, 尽管对 /etc/security/limits.conf 做了设置, 对最大文件打开数,最大进程数做了调优. ...

随机推荐

  1. react super() and super(props)

    subclass: subclass is a class that extends another class. 即子类. In ES2015, to use 'this' in subclasse ...

  2. <ROS> NodeHandle句柄

    作者:jack_20 原文:https://blog.csdn.net/jack_20/article/details/70746736 1.句柄可以让你通过构造函数指定命名空间 ros::NodeH ...

  3. MacOS:Django + Python3 + MySQL

    Django Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站 ...

  4. pyexecjs模块

    1,找到断点事件 2,浏览call stack 下面的代码,找到需要的值 3,F11进入方法内部 对于网站自己定义的方法,可以用py复制下来进行执行js N = function (a, b, c) ...

  5. Python【每日一问】14

    问:请介绍一下Python中的 import 机制 答: import 语句结合了两个操作:1.它先搜索指定名称的模块 2.将搜索结果绑定到当前作用域中的名称. 如果指定名称的模块未找到,则会引发 M ...

  6. docker swarm 搭建与服务更新

    一,docker swarm 是什么 Docker Swarm.Docker Machine与Docker Compose号称Docker三剑客Docker Swarm 和 Docker Compos ...

  7. Validation.Add();Excel

    Irange = (Microsoft.Office.Interop.Excel.Range)worksheet.get_Range("I1", "I1").g ...

  8. (转)SQLServer_十步优化SQL Server中的数据访问五

    第九步:合理组织数据库文件组和文件 创建SQL Server数据库时,数据库服务器会自动在文件系统上创建一系列的文件,之后创建的每一个数据库对象实际上都是存储在这些文件中的.SQL Server有下面 ...

  9. java中如何获得方法中的参数名

    在反射的时候我们可以通过class的getParameterNames()反射获得参数的名称,但是这个名称并不是参数的真实名称,而是类似于arg0,arg1等占位名称. 下面介绍一种方法获得参数真实名 ...

  10. Oracle创建用户、授权、规则

    ---用户登录命令--管理员登录conn sys/oracle as sysdba;--创建用户方案必须是管理员权限--创建用户命令 create user useranme identifild b ...