如何把服务加到systemctl

news/2025/12/9 10:55:04/文章来源:https://www.cnblogs.com/hanease/p/19325350

-------------------------------------------------------------------------------

要将应用(程序 / 脚本)添加到 systemctl 管理,核心是创建一个符合规范的 .service 单元文件(放在 /etc/systemd/system/ 目录下),然后通过 systemctl 命令加载、启用即可。以下是 step-by-step 完整教程,适用于大多数 Linux 发行版(CentOS 7+/Ubuntu 16.04+/Debian 9+ 等)。

核心原理

systemdsystemctl 是其命令行工具)通过 “单元文件”(.service)管理服务,文件中定义了服务的启动命令、运行用户、依赖关系、重启策略等。只要按格式编写该文件,systemctl 就能识别并管理你的应用。

步骤 1:创建 .service 单元文件

1.1 确定文件路径

单元文件需放在 /etc/systemd/system/(系统级服务,所有用户可用)或 ~/.config/systemd/user/(用户级服务,仅当前用户可用)。推荐用系统级(需 sudo),以 myapp.service 为例(服务名可自定义,如 nginx.servicejava-app.service):
bash
 
运行
 
 
 
 
sudo vim /etc/systemd/system/myapp.service
 

1.2 编写单元文件(关键!)

根据应用类型(前台运行 / 后台运行、脚本 / 二进制程序),选择对应的模板,替换占位符即可。
模板 1:通用后台服务(最常用,如 Java 程序、Python 脚本、二进制程序)
适用于需要后台运行、意外退出后自动重启的应用:
ini
 
 
[Unit]
Description=My Custom Application  # 服务描述(自定义,如“我的Java应用”)
After=network.target  # 服务启动依赖:网络就绪后再启动(可选,如依赖数据库可加 mysql.service)[Service]
User=root  # 运行服务的用户(建议用普通用户,如 appuser,需提前创建)
Group=root  # 运行服务的组(与 User 对应)
WorkingDirectory=/opt/myapp  # 应用工作目录(程序/脚本所在目录)
ExecStart=/opt/myapp/start.sh  # 启动命令(绝对路径!如:/usr/bin/java -jar app.jar、/usr/bin/python3 script.py)
Restart=always  # 重启策略:always(总是重启)、on-failure(失败时重启)、never(不重启)
RestartSec=3  # 重启间隔(秒,如意外退出后3秒重启)
KillSignal=SIGINT  # 停止信号(默认即可,无需修改)[Install]
WantedBy=multi-user.target  # 服务安装目标:多用户模式下启动(默认,无需修改)
 
模板 2:前台运行的服务(如某些无后台模式的程序)
部分程序默认前台运行(不后台 daemonize),需用 Type=simple(默认)或 Type=exec,无需额外配置:
ini
 
 
[Unit]
Description=Foreground Application
After=network.target[Service]
User=appuser
WorkingDirectory=/home/appuser/myapp
ExecStart=/home/appuser/myapp/run.sh  # 程序前台运行命令
Restart=on-failure
StandardOutput=journal+console  # 输出到日志和控制台(可选)[Install]
WantedBy=multi-user.target
 
模板 3:带环境变量的服务(如需要自定义 PATH、配置文件路径)
ini
 
 
[Unit]
Description=App with Env Vars[Service]
User=appuser
WorkingDirectory=/opt/myapp
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk"  # 环境变量1
Environment="CONFIG_PATH=/opt/myapp/config.yml"  # 环境变量2
ExecStart=/usr/bin/java -jar app.jar --config $CONFIG_PATH
Restart=always[Install]
WantedBy=multi-user.target
 

关键参数说明(必看!)

参数作用
ExecStart 核心!启动服务的绝对路径命令(不能用相对路径,如 ./start.sh 需改为 /opt/myapp/start.sh
User/Group 指定运行服务的用户(避免用 root,需提前创建普通用户:sudo useradd -m appuser
Restart 重启策略:always(推荐,意外退出自动恢复)、on-failure(仅错误退出时重启)、never
WorkingDirectory 应用的工作目录(如程序需要读取当前目录下的配置文件,必须指定)
After 依赖服务(如依赖数据库,写 After=mysql.service mariadb.service

步骤 2:加载并验证服务

2.1 重新加载 systemd 配置

修改 / 创建 .service 文件后,需让 systemd 识别新服务:
bash
 
运行
 
 
 
 
sudo systemctl daemon-reload
 

2.2 验证服务文件是否有效

检查配置是否有语法错误(关键!避免启动失败):
bash
 
运行
 
 
 
 
sudo systemctl status myapp.service
 
  • 若输出 Loaded: loaded (/etc/systemd/system/myapp.service; disabled; vendor preset: disabled),说明文件无语法错误,已被识别;
  • 若报错 invalid unit file,需回头检查 .service 文件的格式(如括号匹配、参数拼写)。

步骤 3:管理服务(启动、开机自启等)

3.1 启动服务

bash
 
运行
 
 
 
 
sudo systemctl start myapp.service
 
(可简写为 sudo systemctl start myapp.service 后缀可省略)

3.2 查看服务状态(确认是否启动成功)

bash
 
运行
 
 
 
 
sudo systemctl status myapp
 
  • 若显示 active (running),说明启动成功;
  • 若显示 failed,查看日志排查错误:sudo journalctl -u myapp -f-f 实时滚动日志)。

3.3 设置开机自启

bash
 
运行
 
 
 
 
sudo systemctl enable myapp
 
  • 取消开机自启:sudo systemctl disable myapp

3.4 其他常用操作

bash
 
运行
 
 
 
 
sudo systemctl stop myapp        # 停止服务
sudo systemctl restart myapp     # 重启服务
sudo systemctl reload myapp      # 重载服务(若应用支持热重载,无需停止)
sudo journalctl -u myapp         # 查看服务日志(历史)
sudo journalctl -u myapp -f      # 实时查看服务日志
 

常见问题排查

1. 服务启动失败(status 显示 failed

  • 优先看日志:sudo journalctl -u myapp -f,日志会提示具体错误(如 “文件不存在”“权限不足”);
  • 检查 ExecStart 路径是否正确(用 which java/which python3 确认命令绝对路径);
  • 检查工作目录 WorkingDirectory 是否存在,运行用户是否有读写权限。

2. daemon-reload 后仍识别不到服务

  • 确认 .service 文件放在 /etc/systemd/system/(系统级)或 ~/.config/systemd/user/(用户级);
  • 文件名后缀必须是 .service(如 myapp.service,不能是 myapp)。

3. 服务启动后立即退出

  • 检查应用是否支持后台运行(若前台程序,需用模板 2,无需加 & 后台符号);
  • 调整 Restart=on-failure,并查看日志是否有程序崩溃信息。

示例:添加 Java 应用到 systemctl

假设 Java 程序路径为 /opt/myapp/app.jar,运行用户为 appuser,则 .service 文件如下:
ini
 
 
[Unit]
Description=Java Application Service
After=network.target[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar app.jar
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target
 
按步骤执行:
bash
 
运行
 
 
 
 
sudo vim /etc/systemd/system/java-app.service  # 粘贴上面内容
sudo systemctl daemon-reload
sudo systemctl start java-app
sudo systemctl enable java-app
sudo systemctl status java-app  # 验证
 
只要按模板编写 .service 文件,几乎所有应用都能被 systemctl 管理。如果你的应用有特殊需求(如依赖其他服务、需要自定义停止命令),可以告诉我具体场景,我会调整配置~

-------------------------------------------------------------------------------

如何查看 systemctl 的哪些应用
要查看 systemctl 管理的所有应用(即系统服务,.service 单元),可以通过 systemctl 的内置查询命令实现,支持按 “所有服务”“运行中服务”“已启用服务” 等维度筛选。以下是最常用的方法:

核心命令:查看所有已安装的服务

bash
 
运行
 
 
 
 
systemctl list-unit-files --type=service
 

说明:

  • list-unit-files:列出系统中所有 “单元文件”(包括服务、定时器、挂载点等);
  • --type=service:仅筛选 服务类型(排除定时器、挂载点等其他单元);
  • 输出结果包含 3 列:
    1. UNIT:服务名称(如 nginx.servicesshd.service);
    2. STATE:服务的 “启用状态”(enabled 开机自启、disabled 开机不启、masked 禁用、static 无法手动启动);
    3. VENDOR PRESET:系统默认预设状态(通常与 STATE 一致)。

常用筛选:按 “运行状态” 查看

1. 查看当前正在运行的服务

bash
 
运行
 
 
 
 
systemctl list-units --type=service --state=running
 

说明:

  • list-units:列出当前 “活跃的单元”(仅显示正在运行 / 激活的服务,而非所有已安装服务);
  • --state=running:仅筛选 运行中 的服务;
  • 输出会显示服务的 PID、内存占用、启动时间等实时状态。

2. 查看所有 “活跃” 服务(包括运行中、已停止但已激活的)

bash
 
运行
 
 
 
 
systemctl list-units --type=service --state=active
 

3. 查看开机自启的服务

bash
 
运行
 
 
 
 
systemctl list-unit-files --type=service --state=enabled
 
  • 仅显示 STATE 为 enabled(开机自启)的服务,适合检查哪些应用会随系统启动。

4. 查看所有服务(包括活跃 / 非活跃,带详细状态)

bash
 
运行
 
 
 
 
systemctl list-units --type=service --all
 
  • --all:显示所有服务(包括未运行、已失效的服务);
  • 适合排查 “已安装但未运行” 的服务(如 STATE 为 inactive 的服务)。

5. 搜索特定服务(模糊匹配)

如果知道服务名称关键词(如 nginxmysql),用 grep 过滤:
bash
 
运行
 
 
 
 
# 搜索包含 nginx 的服务(所有已安装)
systemctl list-unit-files --type=service | grep nginx# 搜索正在运行的包含 ssh 的服务
systemctl list-units --type=service --state=running | grep ssh
 

6. 简洁查看:仅列出服务名称

如果只需快速获取服务名称(无需状态),可以简化输出:
bash
 
运行
 
 
 
 
# 所有已安装服务(仅名称)
systemctl list-unit-files --type=service --quiet# 正在运行的服务(仅名称)
systemctl list-units --type=service --state=running --quiet
 
  • --quiet:仅输出服务名称(如 nginx.service),不显示表头和状态列,适合脚本处理。

补充:查看服务详情

如果找到某个服务,想查看其详细信息(启动命令、依赖、日志路径等):
bash
 
运行
 
 
 
 
# 替换为具体服务名(如 nginx.service)
systemctl show --all nginx.service
 
或查看更易读的状态摘要:
bash
 
运行
 
 
 
 
systemctl status nginx.service
 

总结:常用命令速查表

需求命令 
所有已安装的服务(含启用状态) systemctl list-unit-files --type=service  
当前运行中的服务 systemctl list-units --type=service --state=running  
开机自启的服务 systemctl list-unit-files --type=service --state=enabled  
搜索特定服务(如 nginx) `systemctl list-unit-files --type=service grep nginx`
查看服务详细信息 systemctl status 服务名.service  
通过以上命令,就能全面掌握 systemctl 管理的所有应用(服务)啦!如果需要进一步操作某个服务(启动、停止、设置开机自启),也可以告诉我~

-------------------------------------------------------------------------------

你执行的这条 tcpdump 命令用于抓取指定端口(80、9301、9302)或指定目标主机(11.*.8*)的所有网络流量,并保存到 http_https.pcap 文件中。以下是详细解析和使用说明:

命令各部分含义

参数 / 选项作用
sudo 以 root 权限执行(抓包需要底层网络权限,普通用户可能失败)
tcpdump 核心抓包工具(Linux/macOS 内置,Windows 需用 Wireshark 替代)
-i any 监听所有网络接口(any 表示所有网卡,也可指定具体网卡如 eth0en0
"port 9301 or port 9302 or port 80 or host 11.*.8*" 抓包过滤规则:
 
- 匹配 端口 80(HTTP 协议默认端口)
 
- 匹配 端口 9301/9302(自定义服务端口)
 
- 匹配 目标 / 源主机为 11.*.8* 的所有流量
 
or 表示 “或”,满足任一条件即抓取)
-w http_https.pcap 将抓包数据保存到文件(-w 表示写文件,pcap 是标准抓包格式,可用于 Wireshark 分析)

关键注意事项

  1. 权限要求:必须用 sudo 执行,否则会报错 tcpdump: permission denied(普通用户无网络抓包权限)。
  2. 过滤规则说明:你的规则会抓取以下所有流量:
    • 所有 80 端口的 HTTP 流量(无论源 / 目标);
    • 所有 9301/9302 端口的流量(可能是自定义服务,如 Elasticsearch 集群通信等);
    • 所有与 11.*.8* 主机通信的流量(无论端口,包括 TCP/UDP/ICMP 等)。
       
      ✅ 若只想抓 “目标是 11.*.8*” 的流量,可改为 dst host 11.*.8*
       
      ✅ 若只想抓 “源是 11.*.8*” 的流量,可改为 src host 11.*.8*
  3. 文件大小与停止抓包:
    • 抓包会持续写入 http_https.pcap,直到手动停止(按 Ctrl+C);
    • 若流量大,文件会快速膨胀,建议添加 -G 3600(每小时分割一个文件)或 -W 10(最多保留 10 个文件)限制大小,例如:
      bash
       
      运行
       
       
       
       
      sudo tcpdump -i any "port 9301 or port 9302 or port 80 or host 11.*.8*" -w http_https_%Y%m%d_%H%M%S.pcap -G 3600 -W 10
      
       
       
  4. 查看抓包结果:
    • 实时查看(不保存文件):去掉 -w 参数,直接执行:
      bash
       
      运行
       
       
       
       
      sudo tcpdump -i any "port 9301 or port 9302 or port 80 or host 11.*.8*"
      
       
       
    • 分析保存的 pcap 文件:用 Wireshark 打开(图形化界面,支持过滤 / 解析协议),或用 tcpdump -r http_https.pcap 命令行查看。

常见问题排查

  • 抓不到数据?检查:
    1. 网卡是否正确(-i any 改为具体网卡,如 ip addr 查看网卡名);
    2. 过滤规则是否有误(例如端口是否被防火墙拦截,主机 11.*.8* 是否有通信);
    3. 是否用 sudo 执行(无权限会静默失败,不抓包)。
  • 文件过大?添加 -C 100(每个文件最大 100MB)+ -W 5(最多 5 个文件)自动轮转。

-------------------------------------------------------------------------------

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

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

相关文章

2025年12月土工布,土工膜,土工格栅厂家最新推荐,产能、专利、环保三维数据透视!

引言​ 随着 “十四五” 基建规划深入推进,土工布、土工膜、土工格栅作为核心工程材料,市场需求持续爆发。据中国土工合成材料工程协会 2025 年测评数据显示,国内相关产品市场规模预计达 680 亿元,年复合增长率 12…

2025 年 12 月色谱仪厂家权威推荐榜:气相/离子/便携式/高效色谱仪,精准分析与智能网络化技术深度解析

好的,请看根据您的要求生成的深度行业文章。 2025 年 12 月色谱仪厂家权威推荐榜:气相/离子/便携式/高效色谱仪,精准分析与智能网络化技术深度解析 在当今的科学研究、环境监测、食品安全、药物研发及工业生产质量控…

2025年五大宁波地磅厂商排行榜,看哪家产品质量稳定

为助力企业精准锁定适配自身称重需求的地磅合作伙伴,避免选型走弯路,我们从技术创新能力(如核心部件自研水平、节能工艺应用)、产品性能表现(含精度稳定性、耐腐蚀性)、定制化服务能力(覆盖特殊行业需求响应)及…

2025年度国产超级电容品牌实力榜:国产超级电容哪家靠谱?

超级电容作为新能源与装备领域的核心储能元件,其技术自主可控性、功率密度与环境适应性直接决定下游设备的性能上限。当前国内市场品牌鱼龙混杂,部分厂商存在参数虚标寿命缩水极端环境失效等问题,让企业选型时面临试…

2025年五大锅炉冷凝器生产厂排名,看哪家合作案例多

为帮企业高效锁定适配自身需求的锅炉冷凝器合作伙伴,避免选型走弯路,我们从技术落地能力(如换热元件耐腐蚀性、热效率稳定性)、产品工艺水准(含材质适配性、结构定制化)、全周期服务质量(覆盖前期选型到后期运维…

2025年靠谱的U型加热管厂家最新用户好评榜

2025年靠谱的U型加热管厂家用户好评榜行业背景与市场趋势随着工业自动化水平的不断提升和新能源产业的快速发展,U型加热管作为电加热设备的核心部件,市场需求持续增长。2025年,全球U型加热管市场规模预计将达到85亿…

详细介绍:C++:类和对象---进阶篇

详细介绍:C++:类和对象---进阶篇2025-12-09 10:46 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

2025年口碑好的网站建设公司推荐:专业靠谱企业全解析

在数字化竞争白热化的当下,一个兼具品牌质感、营销力与技术稳定性的网站,是企业撬开线上市场的关键。面对市场上鱼龙混杂的服务商,如何找到口碑好、专业靠谱的网站建设公司?以下结合行业调研与客户反馈,为你盘点2…

2025年靠谱的橡胶用云母粉厂家选购指南与推荐

2025年靠谱的橡胶用云母粉厂家选购指南与推荐行业背景与市场趋势云母粉作为一种重要的无机非金属矿物填料,在橡胶工业中的应用日益广泛。随着全球橡胶制品行业向高性能、环保化方向发展,云母粉凭借其优异的绝缘性、耐…

2025年铝青铜棒材批发厂家权威推荐榜单:锌白铜管‌/锡磷青铜管‌/锌白铜带源头厂家精选

随着制造业向高性能、高可靠性方向升级,铝青铜等特殊铜合金以其优异的强度、耐磨性、耐腐蚀性及良好的导热导电性能,成为航空航天、船舶制造、重型机械及电力电气等关键领域的核心材料。数据显示,全球特殊铜合金市场…

2025年口碑好的网站建设公司推荐,知名服务商与高性价比企业

在数字化转型的关键节点,一个兼具品牌辨识度、营销转化力与技术稳定性的网站,是企业打通线上流量、沉淀用户资产的核心载体。面对市场上鱼龙混杂的服务商,如何找到口碑好的网站建设团队、筛选知名的网站建设服务商、…

第二届数证杯决赛个人赛(除逆向和数据分析)

计算机取证 1.请分析计算机检材,用户曾远程连接过IP为192.168.114.51的主机,其远程登陆密码为多少?(答案格式:按实际值填写)uika直接看远程桌面是没有内容的,这里仿真进入计算机,win+A取消平板模式,这样看起来更…

【技术干货】如何在Vaadin应用程序中使用自定义Figma组件

在本指南中,您将学习如何使用 Vaadin Copilot 的 Figma Importer API 将 Figma 中的组件复制并粘贴到 Vaadin 中作为 Java 或 React 代码。Vaadin 是一个面向企业级应用的现代 Web 开发框架,专注于 Java 全栈开发、组…

2025年北京连锁餐饮神秘顾客公司权威推荐榜单:饮品店暗访‌/食品安全暗访‌/酒店餐饮神秘顾客源头公司精选

在连锁餐饮竞争日趋白热化的市场环境下,服务质量已成为决定品牌存续的关键。如何获取不受内部信息过滤的、真实客观的门店运营数据,成为管理者的核心诉求。神秘顾客调查,作为一种科学的管理评估工具,正发挥着不可替…

2025香港留学中介机构

2025香港留学中介机构一、如何选择香港留学中介机构作为从业15年的国际教育规划导师,我经常被学生和家长询问:"2025年申请香港高校,应该选择哪家中介机构?"根据《2025年度香港留学中介服务评估报告》显示…

iozone的下载编译测试

下载和编译点击查看代码 #!/bin/bash #set -euo pipefail # 严格模式:遇到错误立即退出、未定义变量报错、管道失败触发退出 if ! command -v wget >/dev/null 2>&1; thenecho "安装wget..."sud…

2025 年 12 月压铸机厂家权威推荐榜:力劲/伊之密/锌合金/铝合金/热室/冷室二手压铸机买卖回收,实力甄选与高效方案解析

2025 年 12 月压铸机厂家权威推荐榜:力劲/伊之密/锌合金/铝合金/热室/冷室二手压铸机买卖回收,实力甄选与高效方案解析 随着全球制造业向精细化、成本效益化方向深度转型,压铸行业作为现代工业体系的重要基石,其设…

2025香港留学中介机构哪家好

2025香港留学中介机构哪家好一、2025年香港留学中介机构选择指南作为从事12年香港留学申请规划导师的我,经常收到学生和家长咨询:2025年香港留学中介机构哪家好?这个问题的答案并非单一,而是需要基于客观数据和个人…

2025 年 12 月镁碳砖厂家权威推荐榜:钢包/转炉/电炉专用耐火材料,高耐用性与热震稳定性深度解析

2025 年 12 月镁碳砖厂家权威推荐榜:钢包/转炉/电炉专用耐火材料,高耐用性与热震稳定性深度解析 在钢铁冶炼这一高温、高压、强侵蚀的严苛工业环境中,耐火材料作为保障生产连续性与安全性的关键内衬,其性能直接决定…

2025香港留学中介机构推荐

2025香港留学中介机构推荐一、2025香港留学中介机构选择指南在2025年,香港作为国际教育枢纽的地位日益巩固,许多学生和家长通过搜索引擎高频查询“香港留学中介哪家可靠”或“如何评估中介服务质量”。作为从业12年的…