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

嵌入式:Linux系统应用程序(APP)启动参数及其规则详解

在 systemd 的服务单元文件中,[Service] 部分用于定义服务的启动、停止、重启等操作,以及服务的运行环境和参数。以下是 [Service] 部分常见参数及其规则的详细介绍:

服务类型相关参数

  • **Type**
    • **作用**:指定服务的启动类型,不同的类型会影响 systemd 对服务启动状态的判断和管理方式。
    • 常见取值及规则
      • **simple**:默认值,适用于服务进程直接在前台运行的情况,systemd 会认为服务启动完成当主进程启动后。例如,一些简单的脚本程序。
      • **forking**:适用于服务会进行 fork 操作,创建子进程并让父进程退出的情况,如传统的守护进程。systemd 会等待服务创建子进程并退出父进程后,认为服务启动完成,通常需要配合 PIDFile 参数指定服务主进程的 PID 文件。
      • **oneshot**:适用于一次性执行的任务,服务执行完后会自动停止。常用于执行初始化脚本或系统配置任务。可以通过 RemainAfterExit=yes 让 systemd 认为服务在执行完后仍然处于活跃状态。
      • **dbus**:适用于通过 D-Bus 进行通信的服务。systemd 会等待服务在 D-Bus 上注册成功后,认为服务启动完成。
      • **notify**:适用于服务会主动向 systemd 发送通知消息的情况。服务启动后,会发送一个通知告知 systemd 自己已经启动完成。
      • **idle**:服务会在所有作业队列处理完毕后才启动。

启动和停止命令参数

  • **ExecStart**
    • **作用**:指定服务的启动命令,是服务启动时执行的主要命令。
    • **规则**:可以有多个 ExecStart 行,但通常只使用一个。命令可以是绝对路径或在系统 PATH 环境变量中的可执行文件,还可以包含命令行参数。例如:ExecStart=/usr/bin/nginx -g 'daemon on; master_process on;'
  • **ExecStartPre**
    • **作用**:指定在 ExecStart 命令执行之前需要执行的命令,常用于执行一些预检查或初始化操作。
    • **规则**:可以有多个 ExecStartPre 行,这些命令会按顺序依次执行,只有当所有 ExecStartPre 命令都成功执行后,才会执行 ExecStart 命令。
  • **ExecStartPost**
    • **作用**:指定在 ExecStart 命令执行之后需要执行的命令,常用于执行一些启动后的配置或检查操作。
    • **规则**:可以有多个 ExecStartPost 行,这些命令会在 ExecStart 命令成功执行后按顺序依次执行。
  • **ExecStop**
    • **作用**:指定服务停止时执行的命令。
    • **规则**:可以有多个 ExecStop 行,这些命令会在服务停止时按顺序依次执行。
  • **ExecReload**
    • **作用**:指定服务重新加载配置时执行的命令。
    • **规则**:通常用于支持配置文件热加载的服务,当执行 systemctl reload 命令时,会执行 ExecReload 命令。

服务重启和超时参数

  • **Restart**
    • **作用**:指定服务在什么情况下需要重启。
    • 常见取值及规则
      • **no**:默认值,服务停止后不会自动重启。
      • **on-success**:服务正常退出(退出状态码为 0)时不会重启,异常退出时会重启。
      • **on-failure**:服务异常退出(退出状态码不为 0)时会重启,如被信号终止、超时等情况。
      • **always**:无论服务是正常退出还是异常退出,都会重启。
      • **on-abnormal**:服务因异常信号(如 SIGSEGV)或超时等异常情况退出时会重启。
  • **RestartSec**
    • **作用**:指定服务重启前的等待时间,单位可以是秒(s)、毫秒(ms)等。
    • **规则**:例如 RestartSec=5s 表示服务停止后,会等待 5 秒再尝试重启。
  • **TimeoutStartSec**
    • **作用**:指定服务启动的超时时间,如果服务在规定时间内没有启动完成,systemd 会认为启动失败。
    • **规则**:例如 TimeoutStartSec=30s 表示服务启动时间不能超过 30 秒。
  • **TimeoutStopSec**
    • **作用**:指定服务停止的超时时间,如果服务在规定时间内没有停止,systemd 会采取强制终止措施。
    • **规则**:例如 TimeoutStopSec=10s 表示服务停止时间不能超过 10 秒。

进程管理和资源限制参数

  • **PIDFile**
    • **作用**:指定服务主进程的 PID 文件路径,常用于 Type=forking 的服务,systemd 可以通过该文件获取服务主进程的 PID,以便进行管理。
    • **规则**:例如 PIDFile=/run/nginx.pid
  • **KillMode**
    • **作用**:指定服务停止时的进程终止方式。
    • 常见取值及规则
      • **control-group**:默认值,会终止服务所在控制组中的所有进程。
      • **process**:只终止服务的主进程。
      • **mixed**:先终止服务的主进程,然后终止服务所在控制组中的所有剩余进程。
      • **none**:不终止任何进程,由服务自己负责清理。
  • **LimitCPU、LimitMEMLOCK 等**
    • **作用**:用于设置服务的资源限制,如 CPU 时间、内存锁定等。
    • **规则**:可以使用 Limit 前缀加上具体的资源名称来设置限制,例如 LimitCPU=200000 表示限制服务的 CPU 时间为 200000 微秒。

环境变量和工作目录参数

  • **Environment**
    • **作用**:指定服务运行时的环境变量。
    • **规则**:可以有多个 Environment 行,每行定义一个或多个环境变量,例如 Environment="VAR1=value1" "VAR2=value2"
  • **WorkingDirectory**
    • **作用**:指定服务的工作目录,服务启动时会切换到该目录。
    • **规则**:例如 WorkingDirectory=/var/www/html
通过合理配置 [Service] 部分的参数,可以精确控制服务的启动、停止、重启等行为,以及服务的运行环境和资源使用。
说明:可以通过 systemctl list-dependencies 命令查看某个服务的依赖关系,从而了解其启动顺序。例如,systemctl list-dependencies nginx.service 会列出 nginx 服务所依赖的其他服务以及它们的启动顺序。
http://www.xdnf.cn/news/150463.html

相关文章:

  • 感知古今:探秘古代传感器的奇妙世界
  • STUN协议 与 TURN协议
  • 如何在SOLIDWORKS中高效管理文件属性?
  • 基于ssm的同城上门维修平台管理系统(源码+数据库)
  • 基于STM32、HAL库的ADS1220IPWR模数转换器ADC驱动程序设计
  • 什么是优质的静态IP?以及如何选择优质的静态IP?
  • redis 数据类型新手练习系列——Hash类型
  • script中async与defer区别
  • Java基本概念
  • C语言标准库函数setlocale用法详解
  • Prometheus中部署Alertmanager
  • 全面解析 Spring 依赖注入:@Autowired、@Inject 与 @Resource 深度剖析
  • CRI、CSI 和 CNI 是三大核心接口标准
  • 多层pcb工厂哪家好?
  • Java 后端开发环境安装
  • 【EDA】Placement(布局)
  • 安全性测试常规测试点全解析:从基础到高级的实战指南
  • AI智能SEO关键词优化策略
  • 人工智能(AI)对网络管理的影响
  • 13.ArkUI Navigation的介绍和使用
  • 队列基础和例题
  • Linux-05 半个月崩了三次 ubuntu 系统记录
  • Linux网络编程
  • 2025智能营销平台发展趋势
  • 消息唯一ID算法参考
  • DbCreateHelper数据库创建指南
  • 建筑节能成发展焦点,楼宇自控应用范围持续扩大
  • 文件IO(Java)
  • Python MCP客户端SDK实现
  • AIDL进程间通信