首页 > 系统相关 >Linux systemd服务

Linux systemd服务

时间:2024-09-13 14:38:40浏览次数:10  
标签:systemd 服务 启动 systemctl 参数 Linux Unit

Linux systemd服务

systemctl命令

systemctl是systemd的主命令,用于管理系统和服务。以下是一些常用的systemctl命令:

  • 查看服务状态:systemctl status 服务名
  • 启动服务:systemctl start 服务名
  • 停止服务:systemctl stop 服务名
  • 重启服务:systemctl restart 服务名
  • 设置开机自启动:systemctl enable 服务名
  • 设置开机不启动:systemctl disable 服务名
  • 重新加载配置文件:systemctl daemon-reload

systemd的Unit文件

systemd通过unit文件来管理服务,unit文件统一了过去各种不同系统资源配置格式。unit文件通常包含三个区块:Unit、Service和Install。

Unit区块

Unit区块主要用于服务说明,包括服务的简单描述、服务类别、启动顺序等。例如:

[Unit]
Description=test
After=network.target

以下是一些常见的Unit区块参数:

  • Description:一段简短的描述性文字,用于说明这个Unit的功能或作用。这是Unit区块中最常见也最重要的参数之一。
  • Documentation:指定服务的文档位置,可以是一个或多个文档的URL路径。这个参数不是必需的,但如果有相关的文档,可以在这里提供,以便管理员或其他用户快速查找。
  • Requires:表示当前Unit依赖的其他Unit列表。如果这些依赖的Unit没有运行,那么当前Unit会启动失败(注意:这一行为可能因systemd版本或配置而异,有些情况下依赖服务启动失败,当前服务也可能继续启动)。但是,如果依赖的Unit在启动后停止运行,当前Unit也会被停止。
  • Wants:与Requires相似,但区别在于如果列出的Unit启动失败,当前Unit不会启动失败。Wants表示的是一种“弱依赖”关系,即这些Unit的启动对当前Unit的启动不是必需的,但如果它们能启动,对当前Unit是有益的。
  • BindsTo:与Requires非常相似,但表示的是一种更强的关联。如果BindsTo列出的任何一个Unit停止运行,当前Unit也会停止运行。这是一种“绑定”关系,表示当前Unit与列出的Unit紧密相关,它们的生命周期是同步的。
  • After:表示当前Unit应该在哪些Unit之后启动。这个参数不会阻塞当前Unit的启动,但会确保在After列出的Unit启动完成后,再启动当前Unit。
  • Before:与After相反,表示当前Unit应该在哪些Unit之前启动。但是,Before并不会阻塞这些Unit的启动,只是设定了一个启动顺序的优先级。
  • Conflicts:表示与当前Unit有冲突的Unit列表。如果Conflicts列出的任何一个Unit已经在运行,那么会尝试停止这个已运行的冲突Unit,并启动当前Unit。这是一种互斥关系,确保在同一时间内,冲突的Unit不会同时运行。
  • Condition... 和 Assert...:这两类参数用于定义当前Unit运行必须满足的条件。Condition参数在条件不满足时,Unit会简单地停止启动;而Assert参数在条件不满足时,会报告启动失败。这些条件可以是系统状态、环境变量等。
  • PartOf:这个参数指定了一个或多个Unit,表示当前Unit是这些Unit的一部分。当PartOf列出的任何一个Unit停止或重启时,当前Unit也会停止或重启。这是一种“从属”关系。

需要注意的是,以上参数并不是必须全部使用的,而是根据具体的Unit需求和系统配置来选择合适的参数进行配置。

Service区块

Service区块是unit文件的核心区域,用于定义服务的启动、停止、重启等行为。例如:

[Service]
Type=forking
User=USER
Group=USER
WorkingDirectory=/PATH
ExecStart=/start.sh
Restart=no

以下是一些常见的Service区块参数:

  • Type:定义服务启动时的进程行为。
    • simple(默认值):直接执行ExecStart指定的命令,启动主进程。
    • forking:以fork方式从父进程创建子进程,创建后父进程会立即退出,子进程成为主进程。
    • oneshot:类似于simple,但只执行一次,systemd会等它执行完,再继续执行其他服务。
    • dbus:等待D-Bus信号后启动。
    • notify:类似于simple,但约定服务会在就绪后向systemd发送一个信号。
    • idle:类似于simple,但要等到其他任务都执行完,才会启动该服务。
  • ExecStart:定义启动服务时要运行的命令和参数。可以是一个完整的命令行,也可以是一个指向脚本的路径。
  • ExecStartPreExecStartPost:分别定义在ExecStart之前和之后要执行的命令。这些命令可以在服务主进程启动之前或之后执行一些准备工作或清理工作。
  • ExecReload:定义重启服务时要执行的命令。这通常用于在不停止服务的情况下重新加载配置或刷新状态。
  • ExecStop:定义停止服务时要执行的命令。这通常用于执行清理操作或优雅地关闭服务。
  • ExecStopPost:定义在ExecStop之后要执行的命令。这些命令可以在服务完全停止后执行一些清理或后续操作。
  • Restart:定义服务退出后是否重新启动,以及如何重新启动。
    • no(默认值):不重新启动。
    • always:总是重新启动。
    • on-success:仅当服务成功退出时重新启动。
    • on-failure:仅当服务异常退出时重新启动。
    • on-abnormal:仅当服务因信号退出时重新启动。
    • on-abort:仅当服务因核心转储退出时重新启动。
    • on-watchdog:仅当watchdog超时退出时重新启动。
  • RestartSec:定义在重新启动服务之前等待的秒数。这有助于避免在短时间内频繁地启动和停止服务,从而减轻系统负担。
  • UserGroup:指定运行服务的用户和组。这有助于增强服务的安全性,确保它们以适当的权限运行。
  • WorkingDirectory:定义服务启动时的工作目录。这可以确保服务在正确的上下文中运行,并访问其所需的文件和资源。
  • Environment:设置服务运行时的环境变量。这可以包括配置选项、路径或其他必要的设置。
  • TimeoutStartSecTimeoutStopSec:分别定义启动和停止服务时允许的最长时间。如果服务在指定的时间内没有启动或停止,systemd将采取相应的措施(如终止服务)。
  • EnvironmentFile:指定一个包含服务所需的环境变量定义的文件。当服务启动时,systemd会读取这个文件,并将其中定义的环境变量加载到服务的运行环境中。使用EnvironmentFile的好处是可以将环境变量的定义集中管理,方便修改和查看。
  • PrivateTmp:布尔值,当设置为true时,为每个服务进程分配独立的临时文件目录,提高安全性。
  • ProtectSystemProtectHome:这些参数用于增强服务的安全性,通过限制服务对系统或其他用户主目录的访问来实现。

需要注意的是,以上参数并不是必须全部使用的,而是根据具体的Unit需求和系统配置来选择合适的参数进行配置。

Install区块

Install区块用于定义服务的安装信息,如服务所属的target和是否开机自启动。例如:

[Install]
WantedBy=multi-user.target

以下是一些常见的Install区块参数:

  • WantedBy:这是最常用的参数之一,用于指定一个或多个target,当这些target被激活时,该服务也会被激活(即开机自启)。例如,WantedBy=multi-user.target表示该服务在达到多用户运行级别时被激活。
  • RequiredBy:与WantedBy类似,但表示更强烈的依赖关系。如果RequiredBy指定的target被激活,那么该服务必须被激活。不过,在systemd的实践中,WantedBy更为常见,而RequiredBy的使用相对较少。
  • Alias:为服务提供一个或多个别名。通过别名,也可以使用systemctl命令来管理服务,而不仅仅是使用服务的原始名称。
  • Also:指定当前服务激活时,同时也会被激活的其他服务。这可以用于设置服务之间的连锁启动关系。
  • DefaultInstance:当服务是模板化的(即使用%i作为实例名称的占位符)时,此参数用于指定默认的实例名称。然而,并非所有服务都会使用模板化实例,因此这个参数并不常用。

需要注意的是,以上参数并不是必须全部使用的,而是根据具体的Unit需求和系统配置来选择合适的参数进行配置。

示例

创建一个systemd服务文件,通常放在/etc/systemd/system/目录下。例如,创建名为your-service.service的文件。
在这个文件中,定义你的服务,包括一个ExecStart指令来指定开机时要执行的命令或脚本。

vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Service
After=network.target

[Service]
Type=simple
ExecStart=/opt/performance/prometheus-3.0.0-beta.0.linux-amd64/prometheus --config.file=/opt/performance/prometheus-3.0.0-beta.0.linux-amd64/prometheus.yml --storage.tsdb.retention.time=30d
Restart=always

[Install]
WantedBy=multi-user.target

重新加载配置

sudo systemctl daemon-reload

启动你的服务以测试它是否按预期工作:

sudo systemctl start prometheus.service

查看服务状态

systemctl status prometheus.service

设置开机时自动启动:

sudo systemctl enable prometheus.service

标签:systemd,服务,启动,systemctl,参数,Linux,Unit
From: https://www.cnblogs.com/test-gang/p/18358873

相关文章

  • 事务问题之跨服务获取不到未提交事务的值的解决方法
    事件背景在配置流程定义完成后,我们遇到了一个棘手的问题:在提交审批后,某个流程变量无法被获取。简而言之,在服务A中,提交审批事务时,新增数据的主键作为工作流的KEY传递给服务B,但服务B中该KEY值为null。思考究竟是什么导致了这个现象?难道是某种神秘力量?解决过程首先,我们采取了常......
  • Linux 之 Nginx 下载/安装
    下载下载地址nginx:download 安装在线安装 配置新的yum源#切换到yum源目录cd/etc/yum.repos.d/#创建yum源文件touchnginx.repo#配置nginx.repo文件内容vimnginx.reponginx.repo文件内容name=nginxrepobaseurl=http://nginx.org/packages/centos/......
  • 工具分享 | 24年最新AWVS/Acunetix Premium V24.8高级版漏洞扫描器(最新版)Windows/Li
    前言AcunetixPremium是一种Web应用程序安全解决方案,用于管理多个网站、Web应用程序和API的安全。集成功能允许您自动化DevOps和问题管理基础架构。AcunetixPremium:全面的Web应用程序安全解决方案Web应用程序对于企业和组织与客户、合作伙伴和员工的联系至关......
  • DELL戴尔PowerEdge服务器PERC阵列Failed离线Offline数据恢复RAID
    针对DELL戴尔PowerEdge服务器中PERC阵列出现Failed离线或Offline状态的数据恢复问题,以下是一个详细的恢复流程和注意事项:一、初步评估与诊断确认故障现象:1.登录服务器管理界面,检查PERC阵列的状态,确认是否显示为Failed、Offline或其他异常状态。记录所有相关的错误信息和日志,以......
  • 一文通透——Kali Linux基础入门_kali linux 新手教程
    ......
  • docker配置springcloud项目到服务器
    1.服务器安装部署docker镜像2.创建镜像目录,如图所示 以其中一个服务为例,每个文件夹对应一个服务单元,每个文件夹中包含 sh,Dockerfile文件3.编辑项目中的application-test(根据环境来定),如图:   4.配置Nacos,单独配置命名空间,增加配置文件,注意,组一定要是test,配错了系......
  • Android Service服务使用方法
    启动服务的方法我们要隐式启动一个Service,首先我们需要配置AndroidMainfest.xml<serviceandroid:name=".MyAsdlService"><intent-filter><actionandroid:name="com.example.myasdlservice"/></int......
  • Spring Cloud全解析:服务调用之Feign简介
    Feign简介Feign是Netflix开发的一个声明式的HTTP客户端(远程服务调用组件),只需要接口+注解即可完成对于微服务的调用,不需要使用RestTemplate+Ribbon来对微服务进行访问,简化了编程,其是基于动态代理机制,目标是减少HTTP调用的复杂性依赖<!--feign--><dependency><groupId>......
  • Sulfo-Cy3-Mal;磺基-Cy3-马来酰亚胺; 标记服务:多肽、蛋白、抗体、小分子
         Sulfo-Cy3-Mal,也称为磺化Cy3马来酰亚胺,是一种水溶性荧光染料,其分子中含有马来酰亚胺(maleimide)官能团,这使得它能够与含有巯基(-SH)的生物分子通过亲和加成反应形成稳定的共价键。这种标记方法具有高度的选择性和特异性,常用于蛋白质、抗体、寡核苷酸等分子的标记。......
  • Linux-Curl使用
    在Linux中,curl是一个强大的命令行工具,用于从服务器或其他URL地址获取数据或与网络服务进行交互。对于自己写不明白的curl,可以使用postman、apipost等接口工具生成curl请求,用于测试#下载单个文件默认将输出打印到标准输出中(STDOUT)中curlhttp://www.centos.org......