大多数Linux发行版使用 systemd作为系统服务管理工具。

systemctl是systemd的主要命令,用于管理控制服务。

这篇文章中将介绍如何创建允许你使用systemctl命令的sysytemd服务文件,如何无需reboot来重启systemd并reload unit文件,如何enable 一个新的服务。

并举例介绍大多数重要的systemd服务文件选项。

创建 systemd service 文件

创建systemd service file /etc/systemd/system/name.service (name 是示例名称,根据你自己的服务名称自行替换)

准备使用自定义服务可执行文件。这可以是自定义创建的脚本,也可以是软件提供商提供的可执行文件。如果需要,准备一个PID文件以保存自定义服务主进程的常量PID。还可以包含环境文件来存储服务的shell变量。确保源脚本是可执行的(通过执行)而不是交互式的。

touch /etc/systemd/system/name.service
chmod 664 /etc/systemd/system/name.service

打开该文件,添加systemd最小服务配置选项:

[Unit]
Description=service_description
After=network.target [Service]
ExecStart=path_to_executable
Type=forking
PIDFile=path_to_pidfile [Install]
WantedBy=default.target

其中:

  • service_description 是一个信息性描述,显示在日志日志文件和systemctl status命令的输出中。
  • 该设置确保仅在网络运行后启动服务。添加以空格分隔的其他相关服务或目标列表 After
  • path_to_executable 代表实际服务可执行文件的路径
  • Type=forking用于进行fork系统调用的守护进程。使用 path_to_pidfile 中指定的PID创建服务的主进程。查找其他启动类型

service 文件发生变更,systemd配置需要重新加载:

$ sudo systemctl daemon-reload

现在,应可以使用 start, stop, restartstatus:

$ sudo systemctl start name
$ sudo systemctl stop name
$ sudo systemctl restart name
$ systemctl status name

在系统启动时自动配置服务,使用 enable

$ sudo systemctl enable name

检查 service 日志:

$ journalctl -u name

Systemd Service File Options 选项

Systemd service files通常含有三个区域。

通用配置项在一般在[Unit][Install]配置

特定于服务的配置选项在 [Service]中进行配置

Important Section Options[Unit]

Option Description
Description unit的简短描述
Documentation 参考文档URI列表
Before, After units 的启动顺序
Requires 如果激活此unit,则此处列出的units也将被激活。如果其他units中的一个停用或发生故障,则此unit将被停用。
Wants 配置较Requires弱的依赖性。如果列出的任何unit未成功启动,则对此unit激活没有影响。这是建立自定义unit依赖关系的推荐方法。
Conflicts 如果一个 unit 已经在其他unit上设置,那么启动前者将停止后者,反之亦然。

表1:Unit Option
> 在大多数情况下,仅使用`After`和`Before` unit 文件选项设置排序依赖关系就足够了。 如果还使用 `Wants`(推荐)或`Requires`设置需求依赖关系,则仍需要指定排序依赖关系。 这是因为排序和需求依赖性彼此独立地工作。

使用 man 查看[Unit]查看完整的选项:

$ man systemd.unit

Important Section Options[Install]

Option Description
Alias 空格分隔的 unit 附加名称列表。大多数命令(不包括systemctl systemctl enable)可以使用别名而不是实际的 unit 名称
RequiredBy, WantedBy 当列出的服务被启动,此服务也会被启动。 参考Wants Requires [Unit]
Also 指定用户运行systemctl enable systemctl disable时要与此 unit 一起启用或禁用的 unit 列表

使用 man 查看[Install]查看完整的选项:

$ man systemd.unit

Important Section Options[Service]

Option Description
Type 配置影响ExecStart功能和相关选项的 unit 进程启动类型。
+ simple - 默认值。从ExecStart开始的进程是服务的主要进程
+ forking - 从ExecStart开始的进程产生了一个子进程,该进程成为该服务的主要进程。启动完成后,父进程退出。
+ oneshot - 类似于simple, 但进程在启动后续units 之前会退出
+ dbus - 类似于simple,但只有在主进程获得D-Bus名称后才启动后续unit
+ notify - 类似于simple,但只有在通过 sd_notify() 函数发送通知消息后才会启动后续unit
+ idle - 类似于simple,服务二进制文件的实际执行被延迟,直到所有作业完成,这避免了将状态输出与服务的shell输出混合。
ExecStart 指定启动设备时要执行的命令或脚本。ExecStartPreExecStartPost指定要在ExecStart之前和之后执行的自定义命令。Type=oneshot可以指定多个自定义命令,然后按顺序执行。
ExecStop 指定 unit 停止时要执行的命令或脚本。
ExecReload 指定重新加载 unit 时要执行的命令或脚本
Restart 启用此选项后,服务将在其进程退出后重新启动,但systemctl命令将执行干净停止( clean stop )
RemainAfterExit 如果设置为True,即使退出所有进程,该服务也会被视为活动状态。默认值为False。如果配置了Type=oneshot,则此选项特别有用

使用 man 查看[Service]查看完整的选项:

$ man systemd.service

postfix.service Unit File 例子

下面是 postfix 包的 systemd 服务文件(/usr/lib/systemd/system/postfix.service redhat OS):

[Unit]
Description=Postfix Mail Transport Agent
After=syslog.target network.target
Conflicts=sendmail.service exim.service [Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
EnvironmentFile=-/etc/sysconfig/network
ExecStartPre=-/usr/libexec/postfix/aliasesdb
ExecStartPre=-/usr/libexec/postfix/chroot-update
ExecStart=/usr/sbin/postfix start
ExecReload=/usr/sbin/postfix reload
ExecStop=/usr/sbin/postfix stop [Install]
WantedBy=multi-user.target

更多信息,参考 arch 文档:systemd

Systemd: Service File Examples的更多相关文章

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

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

  2. systemd service

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

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

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

  4. 【转】CENTOS/RHEL 7 系统中设置SYSTEMD SERVICE的ULIMIT资源限制

    在bash中,有个ulimit命令,提供了对shell及该shell启动的进程的可用资源控制.主要包括打开文件描述符数量.用户的最大进程数量.coredump文件的大小等. 在centos 5/6 等 ...

  5. systemd.service 中文手册

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

  6. Linux Simple Systemd Service Guide

    Simple Systemd Service Guide 主题 Systemd介绍 Systemd基本操作 怎样编写_service_.service文件 怎样部署service Systemd介绍 ...

  7. systemd service 设置limit,不生效问题

    参考博文: http://smilejay.com/2016/06/centos-7-systemd-conf-limits/(解决方法参考此博文)   问题简述:Centos7下修改系统的最大文件打 ...

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

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

  9. Ubuntu18.04初始的systemd service

    Ubuntu18.04初始的systemd service 两个位置 /etc/systemd/system root@dev2:~# ls /etc/systemd/system aliyun.se ...

随机推荐

  1. Python扫描器-爬虫基础

    0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...

  2. Outlook2016中如何实现自动密送

    Outlook2016中如何实现自动密送 下面的方案您可以参考一下: 1)在Outlook里面键入Alt+F11打开VBA编辑器: 2)激活左边的工程面板,展开并双击上面的“Project (VbaP ...

  3. 联想拯救者电脑装Ubuntu没有WIFI

    最近给联想电脑装Ubuntu系统,但是装完之后总是无法启动WIFI,而宽带上网却可以,给出一个解决办法,但是该办法应该只适合联想电脑,其他电脑请自测! 打开终端,输入下面指令: sudo modpro ...

  4. linux /etc/profile bashrc bash_profile

    文件: /etc/profile  ~/.bashrc  和  ~/.bash_profile 的使用区别: /etc/profile: 全局 环境变量等,在机器重启后执行一次, 用于设置环境变量,更 ...

  5. 实现多个JSP页面共用一个菜单

    1.首先将菜单栏代码独立为一个jsp页面 例如 <%@ page language="java" contentType="text/html; charset=U ...

  6. mysql的密码规则问题

    今天在设置mysql某用户的密码时,出现了此报错:   ERROR 1819 (HY000) Your password does not satisfy the current policy req ...

  7. ARM-常见考题和知识点

    1. ARMv7 7中状态,ARMv8对应的状态 2. TEE知识 3. ARM寄存器及作用 4. ARM内部总线AHB APB 5. 1. Thumb | Arm指令区别 编写Thumb指令时,先要 ...

  8. 剪花布条 HDU - 2087(kmp,求不重叠匹配个数)

    Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入 ...

  9. 网络流+最小生成树的最少割边数--How Many to Be Happy?

    题意:https://blog.csdn.net/Ratina/article/details/95200594 思路: 首先我们知道最小生成树就是按长度枚举边,能连就连. 那么,如果这条边在最小生成 ...

  10. Thinkphp自定义生成缩略图尺寸的方法

    Thinkphp自定义生成缩略图尺寸的方法,本实例中生成两张不同尺寸的图片:第一张是大图350*350,第二张 50*50的缩略图 Image类是Thinkphp系统自带的,可以研究下,这个缩略图类很 ...