使用Systemd管理ES服务进程

Centos中的Systemd介绍


CentOS 中的 Systemd 详细介绍

Systemd 是 Linux 系统的初始化系统和服务管理器,自 CentOS 7 起取代了传统的 SysVinit,成为默认的初始化工具。它负责系统启动、服务管理、日志记录等核心功能,显著提升了系统的启动速度和资源管理效率。


1. Systemd 的核心作用

服务管理:启动、停止、重启服务,管理服务依赖关系。
系统初始化:并行化启动进程,加速系统启动。
资源监控:跟踪进程状态、资源占用(CPU、内存等)。
日志管理:通过 journald 统一收集和存储系统及服务日志。
挂载点管理:自动挂载文件系统(替代 /etc/fstab 的部分功能)。


2. Systemd 的核心组件
组件功能
systemd主进程,负责初始化系统和管理其他组件。
systemctl用于管理服务的命令行工具(如启动、停止、重启服务)。
journald日志服务,记录系统、内核及所有服务的日志。
unit系统资源单元(如服务、挂载点、设备等),通过 .service.target 等文件定义。

3. 常用 Systemd 命令
(1) 服务管理
# 启动服务
sudo systemctl start nginx.service# 停止服务
sudo systemctl stop nginx# 重启服务
sudo systemctl restart nginx# 查看服务状态
sudo systemctl status nginx# 设置开机自启
sudo systemctl enable nginx# 禁用开机自启
sudo systemctl disable nginx# 查看所有已启动的服务
systemctl list-units --type=service
(2) 日志管理(journald)
# 查看所有日志(默认显示当前启动的日志)
journalctl# 查看指定服务的日志
journalctl -u nginx.service# 按时间过滤(例如最近1小时)
journalctl --since "1 hour ago"# 实时跟踪日志
journalctl -f# 查看内核日志
journalctl -k
(3) 系统状态与维护
# 查看系统启动时间
systemd-analyze# 分析各服务的启动耗时
systemd-analyze blame# 重新加载修改的 unit 文件
sudo systemctl daemon-reload# 重启 systemd 管理器(仅在紧急情况下使用)
sudo systemctl daemon-reexec

4. Systemd Unit 文件

Systemd 通过 Unit 文件(单元文件)定义系统资源,常见类型包括:
.service:服务单元(如 Nginx、MySQL)。
.target:目标单元(类似 SysVinit 的运行级别,如 multi-user.target)。
.mount:挂载点单元(替代 /etc/fstab)。
.socket:套接字单元(管理网络或 IPC 套接字)。

Unit 文件路径

系统默认配置/usr/lib/systemd/system/
用户自定义配置/etc/systemd/system/

示例:自定义 Service 文件

创建 /etc/systemd/system/myapp.service

[Unit]
Description=My Custom Application
After=network.target[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
User=myuser
Group=mygroup[Install]
WantedBy=multi-user.target
关键字段解释

[Unit]:定义依赖关系和元数据(如 After 表示启动顺序)。
[Service]:配置服务行为(如启动命令、重启策略)。
[Install]:定义如何启用服务(如 WantedBy 指定关联的目标)。


5. Systemd 的日志持久化

默认情况下,journald 的日志存储在内存中(/run/log/journal/),重启后丢失。若需持久化日志:

  1. 创建日志目录:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
  1. 重启 journald
sudo systemctl restart systemd-journald

6. Systemd 与 SysVinit 的对比
特性SystemdSysVinit
启动速度并行启动,速度更快串行启动,速度较慢
服务管理支持依赖关系、按需启动依赖脚本顺序
日志系统统一日志(journald分散在 /var/log/
配置方式通过 Unit 文件定义通过 /etc/init.d/ 脚本管理
兼容性兼容 SysVinit 脚本(但不推荐)仅支持传统脚本

7. 注意事项与最佳实践
  1. 避免直接修改系统默认 Unit 文件
    如需覆盖配置,在 /etc/systemd/system/ 中创建同名文件或使用 systemctl edit

  2. 使用 systemctl enable 而非手动创建符号链接
    确保依赖关系正确处理。

  3. 调试服务启动失败
    • 使用 systemctl status <service> 查看详细错误。
    • 结合 journalctl -u <service> 分析日志。

  4. 定期清理日志

# 保留最近7天的日志
journalctl --vacuum-time=7d

8. 典型问题解决

服务启动超时
在 Unit 文件中增加 TimeoutStartSec=300(单位:秒)。

依赖服务未就绪
使用 AfterRequires 字段明确依赖关系。

自定义环境变量
在 Unit 文件的 [Service] 段添加 Environment="KEY=value"


Systemd 是 CentOS 系统管理的核心工具,熟练掌握其用法可以显著提升运维效率。理解 Unit 文件的设计和日志管理机制,是优化服务稳定性和排查问题的关键!

自建Es进程通过Systemd管理


1. 创建 Elasticsearch 系统用户

# 创建 elasticsearch 用户及用户组(禁止登录)
sudo groupadd es
sudo useradd -g es -s /sbin/nologin elasticsearch# 赋予用户对 ES 安装目录、数据目录、日志目录的权限
sudo chown -R es:elasticsearch /opt/elasticsearch/
sudo chown -R elasticsearch:elasticsearch /var/data/elasticsearch/
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

2. 编写 Systemd Unit 文件

创建文件 /etc/systemd/system/elasticsearch.service,内容如下:

[Unit]
Description=Elasticsearch 7.x Service
Documentation=https://www.elastic.co/guide/en/elasticsearch/reference/7.x/index.html
After=network.target[Service]
User=es
Group=es
Environment="ES_HOME=/opt/elasticsearch"
Environment="ES_PATH_CONF=/etc/elasticsearch"# 限制资源使用(按需调整)
LimitNOFILE=65536
LimitMEMLOCK=infinityExecStart=/opt/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=30s# 内存限制(建议根据服务器配置调整)
Environment="ES_JAVA_OPTS=-Xms4g -Xmx4g"# 安全配置(若启用 xpack)
# Environment="ES_SECURITY_TYPE=trial"[Install]
WantedBy=multi-user.target

3. 加载并启动服务

# 重新加载 Systemd 配置
sudo systemctl daemon-reload# 启动 Elasticsearch
sudo systemctl start elasticsearch# 设置开机自启
sudo systemctl enable elasticsearch# 查看服务状态
systemctl status elasticsearch# 查看实时日志
journalctl -u elasticsearch -f

5. 验证 Elasticsearch 运行

# 检查 ES 是否监听端口 9200
curl http://localhost:9200# 输出示例:
{"name" : "node-1","cluster_name" : "my-es-cluster","cluster_uuid" : "abc123","version" : {"number" : "7.17.3","build_flavor" : "default","build_type" : "tar","build_hash" : "abc123","build_date" : "2023-01-01","build_snapshot" : false,"lucene_version" : "8.11.1","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0"},"tagline" : "You Know, for Search"
}

6. 常见问题与解决

(1) 启动失败:权限不足
# 检查目录权限
sudo chown -R elasticsearch:elasticsearch /opt/elasticsearch
sudo chown -R elasticsearch:elasticsearch /var/data/elasticsearch# 查看详细错误日志
journalctl -u elasticsearch --no-pager -n 50
(2) 内存分配失败

/etc/sysconfig/elasticsearch 中调整 JVM 参数:

# 减少堆内存(例如 2GB)
ES_JAVA_OPTS="-Xms2g -Xmx2g"
(3) 最大文件描述符限制
# 临时生效
ulimit -n 65536# 永久生效(编辑 /etc/security/limits.conf)
echo "elasticsearch - nofile 65536" | sudo tee -a /etc/security/limits.conf

7. 安全配置(可选)

若启用了 Elasticsearch 安全功能(如 xpack),需在 elasticsearch.yml 中添加配置:

# 编辑配置文件 /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

生成密码并保存:

# 进入 ES 安装目录的 bin 文件夹
cd /opt/elasticsearch/bin# 交互式生成所有内置用户密码
./elasticsearch-setup-passwords interactive

8. 完整配置示例

配置示例

/etc/elasticsearch/elasticsearch.yml

cluster.name: my-es-cluster
node.name: node-1
path.data: /var/data/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["node-1", "node-2"]
cluster.initial_master_nodes: ["node-1"]

通过以上步骤,Elasticsearch 7.x 将被 Systemd 托管,实现开机自启、服务监控和日志统一管理。遇到问题时,优先通过 journalctl 分析日志定位原因。

拓展

  • 1、查看当前用户的group
id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【一维前缀和与二维前缀和(简单版dp)】

1.前缀和模板 一维前缀和模板 1.暴力解法 要求哪段区间&#xff0c;我就直接遍历那段区间求和。 时间复杂度O(n*q) 2.前缀和 ------ 快速求出数组中某一个连续区间的和。 1&#xff09;预处理一个前缀和数组 这个前缀和数组设定为dp&#xff0c;dp[i]表示&#xff1a;表示…

在Windows和Linux系统上的Docker环境中使用的镜像是否相同

在Windows和Linux系统上的Docker环境中使用的镜像是否相同&#xff0c;取决于具体的运行模式和目标平台&#xff1a; 1. Linux容器模式&#xff08;默认/常见场景&#xff09; Windows系统&#xff1a; 当Windows上的Docker以Linux容器模式运行时&#xff08;默认方式&#xf…

植物来源药用天然产物的合成生物学研究进展-文献精读121

植物来源药用天然产物的合成生物学研究进展 摘要 大多数药用天然产物在植物中含量低微&#xff0c;提取分离困难&#xff1b;而且这些化合物一般结构复杂&#xff0c;化学合成难度大&#xff0c;还容易造成环境污染。基于合成生物学技术获得药用天然产物具有绿色环保和可持续发…

JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 笔记来源&#xff1a;在这位大佬的基础上添加了一些东西&#xff0c;欢迎大家支持原创&#xff0c;大佬太棒了&#xff1a;JavaScript |&#xff08;五&#xff09;DOM简介 | 尚硅谷JavaScript基础…

浏览器工作原理深度解析(阶段二):HTML 解析与 DOM 树构建

一、引言 在阶段一中&#xff0c;我们了解了浏览器通过 HTTP/HTTPS 协议获取页面资源的过程。本阶段将聚焦于浏览器如何解析 HTML 代码并构建 DOM 树&#xff0c;这是渲染引擎的核心功能之一。该过程可分为两个关键步骤&#xff1a;词法分析&#xff08;Token 化&#xff09;和…

The Illustrated Stable Diffusion

The Illustrated Stable Diffusion 1. The components of Stable Diffusion1.1. Image information creator1.2. Image Decoder 2. What is Diffusion anyway?2.1. How does Diffusion work?2.2. Painting images by removing noise 3. Speed Boost: Diffusion on compressed…

yarn 装包时 package里包含sqlite3@5.0.2报错

yarn 装包时 package里包含sqlite35.0.2报错 解决方案&#xff1a; 第一步&#xff1a; 删除package.json里的sqlite35.0.2 第二步&#xff1a; 装包&#xff0c;或者增加其他的npm包 第三步&#xff1a; 在package.json里增加sqlite35.0.2&#xff0c;并运行yarn装包 此…

一个免费 好用的pdf在线处理工具

pdf24 doc2x 相比上面能更好的支持数学公式。但是收费

buu-bjdctf_2020_babystack2-好久不见51

整数溢出漏洞 将nbytes设置为-1就会回绕&#xff0c;变成超大整数 从而实现栈溢出漏洞 环境有问题 from pwn import *# 连接到远程服务器 p remote("node5.buuoj.cn", 28526)# 定义后门地址 backdoor 0x400726# 发送初始输入 p.sendlineafter(b"your name…

DHCP 配置

​ 最近发现&#xff0c;自己使用虚拟机建立的集群&#xff0c;在断电关机或者关机一段时间后&#xff0c;集群之间的链接散了&#xff0c;并且节点自身的 IP 也发生了变化&#xff0c;发现是 DHCP 的问题&#xff0c;这里记录一下。 DHCP ​ DHCP&#xff08;Dynamic Host C…

股指期货合约的命名规则是怎样的?

股指期货合约的命名规则其实很简单&#xff0c;主要由两部分组成&#xff1a;合约代码和到期月份。 股指期货合约4个字母数字背后的秘密 股指期货合约一般来说都是由字母和数字来组合的&#xff0c;包含了品种代码和到期的时间&#xff0c;下面我们具体来看看。 咱们以“IF23…

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…

深入探究 JVM 堆的垃圾回收机制(二)— 回收

GC Roots 枚举需要遍历整个应用程序的上下文&#xff0c;而在进行可达性分析或者垃圾回收时&#xff0c;如果我们还是进行全堆扫描及收集&#xff0c;那么会非常耗时。JVM 将堆分为新生代及老生代&#xff0c;它们的回收频率及算法不一样。 1 回收算法 在进行可达性分析时&am…

蓝桥杯 之 数论

文章目录 习题质数找素数 数论&#xff0c;就是一些数学问题&#xff0c;蓝桥杯十分喜欢考察&#xff0c;常见的数论的问题有&#xff1a;取模&#xff0c;同余&#xff0c;大整数分解&#xff0c;素数&#xff0c;质因数&#xff0c;最大公约数&#xff0c;最小公倍数等等 素…

Unity Shader编程】之渲染流程之深度及pass详解

关于透明物体的渲染&#xff0c;首先需要了解以下部分 深度缓冲区深度写入深度测试pass渲染和深度测试的过程深度测试和颜色混合过程 ** 一&#xff0c;深度缓冲区 ** 深度即物体距离相机的距离&#xff0c;深度写入即是把物体的距离相机信息记录下来&#xff0c;写入一个名…

csv文件格式和excel数据格式有什么区别

CSV&#xff08;Comma-Separated Values&#xff09;和Excel&#xff08;XLS/XLSX&#xff09;数据格式的主要区别如下&#xff1a; 1. 文件格式 CSV&#xff1a;纯文本格式&#xff0c;每一行表示一条记录&#xff0c;字段之间用逗号&#xff08;,&#xff09;或其他分隔符&…

Beans模块之工厂模块注解模块@Qualifier

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

C# HTTP 文件上传、下载服务器

程序需要管理员权限&#xff0c;vs需要管理员打开 首次运行需要执行以下命令注册URL&#xff08;管理员命令行&#xff09; netsh advfirewall firewall add rule name"FileShare" dirin actionallow protocolTCP localport8000 ipconfig | findstr "IPv4&quo…

基于 TRIZ 理论的筏式养殖吊笼清洗装备设计研究

基于 TRIZ 理论的筏式养殖吊笼清洗装备设计研究 一、引言 筏式养殖在水产养殖业中占据重要地位&#xff0c;吊笼作为养殖贝类、藻类等生物的关键器具&#xff0c;其清洁程度直接影响养殖生物的健康与产量。传统的吊笼清洗方式多依赖人工&#xff0c;效率低下、劳动强度大且清洗…

QA:备份产品的存储架构采用集中式和分布式的优劣?

分布式和集中式各有优劣&#xff0c;且这两者下面的存储类型也都不尽相同&#xff0c;从备份与恢复的数据层面来看&#xff0c;这两者存储相结合才是优解。 众所周知&#xff0c;备份数据只存一份还只放在一个存储里是不现实的。假设把备份数据访问频率、生命周期等参数分为三个…