当前位置: 首页 > news >正文

【运维】linux使用systemd手动部署与管理服务进程,以webhook回调告警为例(附常用linux进程/端口状况查看命令)

【运维】linux使用systemd手动部署与管理服务进程,以webhook回调告警为例(附常用linux进程/端口状况查看命令)

文章目录

    • 1、systemd服务部署
    • 2、webhook回调告警服务
    • 3、常用linux进程/端口状况查看命令

1、systemd服务部署

1、服务配置文件,创建服务

  • 创建服务:sudo nano /etc/systemd/system/test1.service

  • [Unit] 部分:

    • Description: 对服务的简要描述。
    • After: 指定服务启动的顺序,这里表示在 network.target 之后启动该服务。
  • [Service] 部分:

    • ExecStart: 指定运行服务的命令。在这个例子中,它是一个 Python 脚本。
    • Restart: 定义何时重启服务,这里设置为在服务失败时重启。
    • UserGroup: 指定服务运行的用户和组。
  • [Install] 部分:

    • WantedBy: 定义服务安装时,链接到的目标/运行级别,这里表示多用户模式。
[Unit]
Description=test1
After=network.target[Service]
ExecStart=/home/test1 -f /home/etc/test1-api.yaml
Restart=always
User=nobody
Group=nogroup[Install]
WantedBy=multi-user.target

2、常用服务命令

  • 查看服务状态
systemctl status <服务名>
systemctl status nginx
  • 启动服务(常用)
systemctl start <服务名>
systemctl start nginx
  • 停止服务
systemctl stop <服务名>
systemctl stop nginx
  • 重启服务(重载配置), (常用)
systemctl restart <服务名>
systemctl restart nginx
  • 重新加载服务配置
systemctl reload <服务名>
systemctl reload nginx
  • 启用服务(开机启动, 常用)
systemctl enable <服务名>
systemctl enable nginx
  • 禁用服务(取消开机启动)
systemctl disable <服务名>
systemctl disable nginx
  • 检查服务是否开机启动
systemctl is-enabled <服务名>
systemctl is-enabled nginx
  • 查看所有服务的状态
systemctl list-units --type=service
  • 获取服务日志
journalctl -u <服务名>
journalctl -u nginx
  • 重新加载 systemd 管理的服务配置文件
systemctl daemon-reload

3、服务宕机感知

  1. 设置 Restart 选项
    在服务的 unit 文件中可以配置 Restart 选项,以便在服务失败或停止时自动重新启动服务。常见的选项有 alwayson-failure 等。

    [Service]
    ExecStart=/usr/bin/your-service
    Restart=always# 可选的,设置重启之前的延时
    RestartSec=10
    
  2. 配置报警和通知

    • 系统日志监控:Systemd 会将服务状态的变更记录在系统日志中,可以结合 ELK(Elasticsearch, Logstash, Kibana)、Prometheus + Grafana、Zabbix 等监控系统进行报警通知。

    • 自定义脚本:在服务的 unit 文件中,使用 ExecStartPreExecStartPost 调用自定义脚本来发送通知。例如:

      [Service]
      ExecStart=/usr/bin/your-service
      Restart=always
      ExecStartPost=/path/to/your-notification-script.sh
      
  3. Watchdog
    使用 Systemd 的 Watchdog 功能来监控服务。如果服务未能在规定时间内回应,systemd 将会执行相应的处理。

    在 unit 文件中配置如下:

    [Service]
    ExecStart=/usr/bin/your-service
    Restart=on-failure
    WatchdogSec=30s
    

2、webhook回调告警服务

回调接口介绍:

  • 接口回调是一种设计模式,使得程序可以在某些事件发生或条件满足时,主动调用一些预定的函数或方法。
  • 接口回调的用法非常广泛,以下是一些常见的接口回调用法:
    事件监听:例如在用户界面中,当用户点击按钮、滑动滚动条等事件发生时,可以通过回调方法处理这些事件。
    异步处理:例如在网络请求、文件读写等异步操作中,可以使用回调方法处理结果,不阻塞主线程。
    自定义行为:例如在排序、遍历等操作中,可以通过回调方法自定义操作的行为。
  • UI交互:在用户界面交互中,通过接口回调处理用户事件,如点击、滑动、输入等。
    网络请求:在网络请求中,通过接口回调处理请求的结果,如成功、失败、超时等。
    多线程编程:在多线程编程中,通过接口回调处理线程的状态,如开始、结束、进度等。
    数据库操作:在数据库操作中,通过接口回调处理查询、更新、删除等操作的结果。
  • 1, 2

webhook介绍,与api的区别:

  • Webhook 是一种基于 HTTP 的回调函数,可在 2 个应用编程接口(API)之间实现事件驱动的轻量级通信。
  • 要设置 Webhook,客户端需向服务器 API 提供唯一的 URL,并指定其要了解的事件。设置 Webhook 后,客户端不再需要轮询服务器。发生特定的事件时,服务器会自动将相关的有效负载发送到客户端的 Webhook URL。
  • Webhook 通常被称为“反向 API” 或“推送 API”,因为通信责任落在了服务器而非客户端上。与客户端不断发送 HTTP 请求来请求数据,直至服务器作出响应的方式不同,服务器在数据可用时会立即向客户端发送一个 HTTP POST 请求。虽然有这些别名,但其实 Webhook 并非 API,二者可以结合使用。应用必须具有 API 才能使用 Webhook。
  • 1, 2, 3

这里以告警bot为例

  • 1、实现一个中转proxy转发的服务进程
  • 2、提供回调接口给到云平台(按照平台定义的接口规范),这样平台触发告警后会调用这个接口
  • 3、接口收到消息后,转推送消息到webhook订阅号(企微,钉钉等等)

3、常用linux进程/端口状况查看命令

参考资料:1 , linux基础命令总结整理

Linux 常用命令

进程:
sudo su
bash install.sh
stress --cpu 1 --timeout 60 # 压力测试
ps aux | grep 'test1'
pidof test.py
lsof +D /home网络: 
ip -4 a
ifconfig | grep br0硬盘: 
free -h

查找进程

  • 如果知道进程名称或命令行的一部分,你可以使用 psgrep 结合来查找。例如: ps aux | grep '[t]est.py'
    这里的 aux 参数列出所有进程,包括其他用户的进程。用 [t]est.py 而不是 test.py 来避免 grep 自己显示在结果中。

  • 如果你知道进程启动的确切可执行文件,可以用 pidof test.py

  • lsof 是另一个强大的工具,可以列出打开的文件和相关进程。比如要找出在 home 目录下打开的文件相关的进程:

    lsof +D /home/yourusername
    

    这将列出所有打开 /home/yourusername 下文件的进程。

  • 可以使用交互式工具如 tophtop 来显示系统中的所有进程,然后通过筛选找到特定的进程:

    top -u $(whoami)
    

    top 中你可以按 / 然后输入关键字来搜索进程名。

  • pidstatsysstat 包中的一个工具,可以用来监控特定 PID 的资源使用情况。如果你知道进程特征,可以过滤:

    pidstat -u -p ALL | grep 'test.py'
    

端口占用情况

  • netstat 是一个用于显示网络连接、路由表、接口统计数据、伪装连接和多播成员的命令。

    netstat -tuln | grep LISTEN
    
    • -t: 显示TCP端口
    • -u: 显示UDP端口
    • -l: 显示监听状态的端口
    • -n: 以数字格式显示地址和端口
    • -p: 显示使用端口的进程PID和名称
  • ss 提供了类似 netstat 的功能,但速度更快,信息更详细。
    查看所有监听的端口: ss -tuln
    同样地,你也可以使用 -p 参数来显示每个端口相关的进程 : sudo ss -tulnp

  • lsof 是一个列出打开的文件的工具,其中也包括网络文件。
    查看指定端口的占用情况,例如端口8080:

    sudo lsof -i :8080
    

    查看所有监听的端口:

    sudo lsof -i -P -n | grep LISTEN
    
    • -P: 强制使用端口号而非服务名
    • -n: 强制使用数字格式的IP地址而非主机名
  • 使用 nmap
    nmap 是一个网络扫描工具,通常用于扫描开放的端口,但也可以用来查看本地系统的端口状态。
    安装 nmap:

    sudo apt-get install nmap  # Debian/Ubuntu系
    sudo yum install nmap      # CentOS/Fedora系
    

    扫描本地开放的端口:

    sudo nmap -sT -O localhost
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#发邮件时如何确保邮件内容的安全和隐私?
  • 猫用空气净化器好不好?养猫推荐宠物空气净化器品牌
  • uniapp点击预览图片,两种效果
  • ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南
  • 聚类分析|距离与相似系数|层次聚类|K均值聚类|SPSS及Matlab
  • SQL 调优最佳实践笔记
  • Spring + Boot + Cloud + JDK8 + Elasticsearch 单节点 模式下实现全文检索高亮-分页显示 快速入门案例
  • Spring Boot项目热部署
  • Git克隆仓库太大导致拉不下来的解决方法 fatal: fetch-pack: invalid index-pack output
  • 凤凰花:绚烂花语与独特魅力
  • Google Ads广告为Demand Gen推出生成式AI工具,可自动生成广告图片
  • python 异常处理详解带(3分钟速通)
  • 笔记本电脑无线网卡突然没有了
  • LeetCode 3133.数组最后一个元素的最小值:位运算+双指针
  • 更换域名后图片不显示
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 2017-08-04 前端日报
  • emacs初体验
  • express + mock 让前后台并行开发
  • FineReport中如何实现自动滚屏效果
  • Leetcode 27 Remove Element
  • SQLServer之创建数据库快照
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 深度学习中的信息论知识详解
  • 一些css基础学习笔记
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #Linux(权限管理)
  • (1) caustics\
  • (55)MOS管专题--->(10)MOS管的封装
  • (C++)八皇后问题
  • (Python第六天)文件处理
  • (zt)最盛行的警世狂言(爆笑)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (转)Mysql的优化设置
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .java 9 找不到符号_java找不到符号
  • .net core 的缓存方案
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net MVC4 上传大文件,并保存表单
  • .NET 给NuGet包添加Readme
  • .net 使用ajax控件后如何调用前端脚本
  • .NET处理HTTP请求
  • .Net小白的大学四年,内含面经
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [2021 蓝帽杯] One Pointer PHP
  • [AIGC] Java List接口详解
  • [C# 网络编程系列]专题六:UDP编程
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [C++] 多线程编程-thread::yield()-sleep_for()