欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux Simple Systemd Service Guide

程序员文章站 2022-11-21 20:47:37
A simple guide for Linux systemd service ......

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

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

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