ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux Systemd服务(2021.07.09)

2022-05-26 16:01:34  阅读:210  来源: 互联网

标签:Systemd 服务 2021.07 启动 09 systemd 当前 Unit


Linux Systemd服务(2021.07.09)

目录

一、概述

本文将介绍通过systemd来实现服务的自启动。systemd是一套系统启动和管理的工具,字母d是守护进程(daemon)的缩写。

二、配置文件

systemd的配置文件主要放置在/etc/systemd/system//lib/systemd/system目录,如果需要添加服务,只需在目录下添加对应的配置文件即可。例如:

# 添加服务配置文件
$ sudo vim /etc/systemd/system/demo.service
[Unit]
Description=demo # 服务描述
After=network.target # 指定服务依赖的 target

[Service]
User=root # 服务运行用户
Group=root # 服务运行用户组

WorkingDirectory=/root/water # 服务工作目录
ExecStart=/usr/local/bin/java -jar demo.jar # 服务启动命令
Type=simple # 服务进程启动方式

Restart=on-failure # 指定服务何时重启

[Install]
WantedBy=multi-user.target # 指定服务所属 target,与自启动相关,一般不用改

# 重新加载所有 service 的配置
$ sudo systemctl daemon-reload

2.1 Unit

systemd可以管理所有的系统资源,不同的资源称为Unit(单位),该部分可以定义Unit的元数据,以及配置与其它Unit的关系。主要字段如下:

  • Description:简短描述
  • Documentation:文档地址
  • Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
  • Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
  • BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
  • Before:当前 Unit 必须在该字段指定的 Unit 之前启动
  • After:当前 Unit 必须要在该字段指定的 Unit 之后启动

2.2 Service

Service用来配置 Service,只有 Service 类型的 Unit 才有该部分。主要字段如下:

  • Type:定义启动时的进程行为,它有以下几种值:
    • Type=simple:默认值,执行 ExecStart 指定的命令,启动主进程
    • Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
    • Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
    • Type=dbus:当前服务通过D-Bus启动
    • Type=notify:当前服务启动完毕,会通知 Systemd,再继续往下执行
    • Type=idle:若有其他任务执行完毕,当前服务才会运行
  • User:启动当前服务的用户
  • Group:启动当前服务的用户组
  • WorkingDirectory:当前服务的工作目录
  • ExecStart:启动当前服务的命令
  • ExecStartPre:启动当前服务之前执行的命令
  • ExecStartPost:启动当前服务之后执行的命令
  • ExecReload:重启当前服务时执行的命令
  • ExecStop:停止当前服务时执行的命令
  • ExecStopPost:停止当其服务之后执行的命令
  • RestartSec:自动重启当前服务间隔的秒数
  • Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
  • TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数
  • Environment:指定环境变量

2.3 Install

Install用来定义如何启动,以及是否开机启动。主要字段如下:

  • WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
  • RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
  • Alias:当前 Unit 可用于启动的别名
  • Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit

三、开机启动

通过下面的命令设置服务开机自启动:

$ sudo systemctl enable demo.service

四、启动服务

设置开机启动后,服务并不会立即启动,可以通过下列命令启动服务:

$ sudo systemctl start demo.service

五、查看状态

服务可能会启动失败,通过以下命令查看服务状态:

$ sudo systemctl status demo.service

六、停止服务

可以通过以下命令终止正在运行的服务:

$ sudo systemctl stop demo.service

如果命令没有响应,可以通过以下命令强制kill进程:

$ sudo systemctl kill demo.service

七、重启服务

通过以下命令重启服务:

$ sudo systemctl restart demo.service

参考文章:

标签:Systemd,服务,2021.07,启动,09,systemd,当前,Unit
来源: https://www.cnblogs.com/xiaoQQya/p/16313767.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有