Linux systemd服务
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:定义启动服务时要运行的命令和参数。可以是一个完整的命令行,也可以是一个指向脚本的路径。
- ExecStartPre、ExecStartPost:分别定义在ExecStart之前和之后要执行的命令。这些命令可以在服务主进程启动之前或之后执行一些准备工作或清理工作。
- ExecReload:定义重启服务时要执行的命令。这通常用于在不停止服务的情况下重新加载配置或刷新状态。
- ExecStop:定义停止服务时要执行的命令。这通常用于执行清理操作或优雅地关闭服务。
- ExecStopPost:定义在ExecStop之后要执行的命令。这些命令可以在服务完全停止后执行一些清理或后续操作。
- Restart:定义服务退出后是否重新启动,以及如何重新启动。
- no(默认值):不重新启动。
- always:总是重新启动。
- on-success:仅当服务成功退出时重新启动。
- on-failure:仅当服务异常退出时重新启动。
- on-abnormal:仅当服务因信号退出时重新启动。
- on-abort:仅当服务因核心转储退出时重新启动。
- on-watchdog:仅当watchdog超时退出时重新启动。
- RestartSec:定义在重新启动服务之前等待的秒数。这有助于避免在短时间内频繁地启动和停止服务,从而减轻系统负担。
- User 和 Group:指定运行服务的用户和组。这有助于增强服务的安全性,确保它们以适当的权限运行。
- WorkingDirectory:定义服务启动时的工作目录。这可以确保服务在正确的上下文中运行,并访问其所需的文件和资源。
- Environment:设置服务运行时的环境变量。这可以包括配置选项、路径或其他必要的设置。
- TimeoutStartSec、TimeoutStopSec:分别定义启动和停止服务时允许的最长时间。如果服务在指定的时间内没有启动或停止,systemd将采取相应的措施(如终止服务)。
- EnvironmentFile:指定一个包含服务所需的环境变量定义的文件。当服务启动时,systemd会读取这个文件,并将其中定义的环境变量加载到服务的运行环境中。使用EnvironmentFile的好处是可以将环境变量的定义集中管理,方便修改和查看。
- PrivateTmp:布尔值,当设置为true时,为每个服务进程分配独立的临时文件目录,提高安全性。
- ProtectSystem、ProtectHome:这些参数用于增强服务的安全性,通过限制服务对系统或其他用户主目录的访问来实现。
需要注意的是,以上参数并不是必须全部使用的,而是根据具体的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
Linux systemd服务的更多相关文章
- Linux之systemd服务配置及自动重启
layout: post title: Linux之systemd服务配置及自动重启 date: 2019-09-09 tags: linux --- Linux之systemd服务配置及自动重启 0 ...
- CentOS 7下设置Docker代理(Linux下Systemd服务的环境变量配置)
Docker守护程序使用HTTP_PROXY,HTTPS_PROXY以及NO_PROXY环境变量在其启动环境来配置HTTP或HTTPS代理的行为.无法使用daemon.json文件配置这些环境变量. ...
- systemd服务详解-技术流ken
简介 在centos5中生成和管理用户空间中的进程以及完成系统的初始化使用的是init,并且是依次启动.在centos6中则是使用的upstart,在一定程度上实现了并行启动,但是仍然存在依赖关系,到 ...
- centos7下将java -jar命令运行一个项目做成systemd服务
有些时候运行一个java项目在linux下通过一条简单的java命令即可,如: #nohup java -jar jenkins.war & ###这里为后台运行jenkins 在此背景下,j ...
- Linux systemd资源控制初探
Linux systemd资源控制初探 本文记录一次cgroup子目录丢失问题,并简单探索了Linux systemd的资源控制机制. 问题现象 我们希望通过systemd拉起服务并通过cgroup限 ...
- linux systemd 从简单的例子入门
linux systemd 从简单的例子入门 网上很多相关链接,一上来就给一大堆命令和讲解,让人头都大. 我们希望有一个service(服务),让它在开机启动的时候就执行. 用 root 登陆以后: ...
- [转帖]Linux systemd 常用命令
Linux systemd 常用命令 https://www.cnblogs.com/tsdxdx/p/7288490.html systemctl hostnamectl timedatectl l ...
- [转帖][Linux]systemd和sysV
[Linux]systemd和sysV 转自:https://www.cnblogs.com/EasonJim/p/7168216.html 在Debian8中systemd和sysVinit同时 ...
- linux的服务管理(centos6和Centos7)和网络管理(网卡配置),计划服务cron
服务和网络 管理 init ifcfg ens33 1.服务: Linux系统中提供的功能,统称为服务,如:at服务.cron服务.web服务.FTP服务.sshd服务等. 服务是由已经在运行的进程 ...
- Linux文件共享服务之NFS
NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...
随机推荐
- npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本
升级node和npm之后,npm run dev 启动一个Vue项目,报错如下: npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本. ...
- 鸿蒙ArkUI-X已更新适配API13啦
ArkUI-X 5.0.1 Release版配套OpenHarmony 5.0.1 Rlease,API 13,新增适配部分API 13接口支持跨平台:框架能力进一步完善,支持Android应用非压缩 ...
- PythonDay4Advance
PythonDay4Advance 函数 引言:比如植物大战僵尸,这个游戏本身也是由代码编写,现在假设有一种豌豆射手,每发射一次 炮弹会执行100行逻辑代码 如果我在程序,每当需要发射炮弹的时候,都要 ...
- Node.js 介绍和特点
1.node.js是什么 node.js不是一门语言,而是一个开发平台,是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 何为开发平台:有对应的语言和实现特定功能的api 2. ...
- 一款渗透测试信息收集集成工具--mitan密探
本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负.作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况 ...
- ECShop开源商城与COS互通:降低本地存储负载、提升访问体验
ECShop简介 ECShop是一款开源电子商务平台,具有简单易用.安全稳定.模块化设计等特点.它提供了完整的电子商务解决方案,包括商品管理.订单管理.支付管理.配送管理.会员管理.促销管理.数据统计 ...
- Vue3 面试题 (2023-09-26更新)
Vue3 对比 Vue2 做了那些改进? 1. 响应式系统 vue2 中使用的 Object.defineProperty 实现的响应式,劫持整个对象,递归遍历所有属性,给每个属性添加 getter ...
- [转载] 十问 TiDB :关于架构设计的一些思考 TiDB
做 TiDB 的缘起是从思考一个问题开始的:为什么在数据库领域有这么多永远也躲不开的坑?从 2015 年我们写下第一行代码,3 年以来我们迎面遇到无数个问题,一边思考一边做,尽量用最小的代价来快速奔跑 ...
- 解决:pip is configured with locations that require TLS/SSL
解决: mkdir -p ~/.pipvim ~/.pip/pip.conf然后输入内容: [global]index-url = http://mirrors.aliyun.com/pypi/sim ...
- Qt/C++音视频开发78-获取本地摄像头支持的分辨率/帧率/格式等信息/mjpeg/yuyv/h264
一.前言 上一篇文章讲到用ffmpeg命令方式执行打印到日志输出,可以拿到本地摄像头设备信息,顺藤摸瓜,发现可以通过执行 ffmpeg -f dshow -list_options true -i v ...