CentOS 7 下 systemctl 开机启动脚本配置

示例脚本

[Unit]      # 主要是服务说明
Description=test        # 简单描述服务
After=network.target    # 描述服务类别,表示本服务需要在network服务启动后在启动
Before=xxx.service      # 表示需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。

[Service]       # 核心区域
Type=forking        # 表示后台运行模式。
User=user           # 设置服务运行的用户
Group=user          # 设置服务运行的用户组
KillMode=control-group      # 定义systemd如何停止服务
PIDFile=/usr/local/test/test.pid        # 存放PID的绝对路径
Restart=no          # 定义服务进程退出后,systemd的重启方式,默认是不重启
ExecStart=/usr/local/test/bin/startup.sh    # 服务启动命令,命令需要绝对路径
PrivateTmp=true     # 表示给服务分配独立的临时空间
   
[Install]   
WantedBy=multi-user.target  # 多用户

[Unit] 模块 – 服务说明

OptionDescription
DescriptionUnit 的简短描述
Documentation参考文档 URI 列表
Before, AfterUnits 的启动顺序
Requires此 Unit 启动需要的依赖,如果依赖 “停用” 或 “发生故障”,此 Unit 将被停用
Wants配置较 “Requires” 弱的依赖性 – 如果列出的 Unit 未成功启动,则此 Unit 启动没有影响
Conflicts如果一个 Unit 已经在其他 Unit 上设置,则 “启动前者” 将 “停止后者” – 反之亦然(互斥)

[Service] 模块 – 核心区域

OptionDescription
Type配置影响 “ExecStart” 功能和相关选项 Unit 进程的启动类型:
+ simple – 默认值,从 ExecStart 开始的进程是服务的主要进程
+ forking – 从 “ExecStart” 开始的进程产生一个子进程,该子进程为该服务的主要进程(启动完成后,父进程退出)
+ oneshot – 类似于 “simple” ,但进程在启动后续 Units 之前会退出
+ dbus – 类似于 “simple” ,但只有在主进程获得 D-Bus 名称后,才启动后续 Unit
+ notify – 类似于 “simple” ,但只有通过 “sd_notify() 函数” 发送通知消息后才会启动后续 Unit
+ idle – 类似于 “simple” ,服务二进制文件的实际执行将被延迟,直到所有作业完成,避免了 “状态输出” 和 “服务的 Shell 输出” 混合
ExecStart指定启动设备时要执行的 “命令” 或 “脚本”
+ “ExecStartPre” 和 “ExecStartPost” 指定要在 “ExecStart” 之前、之后执行的自定义命令
+ “Tpye=oneshot” 可以指定多个自定义命令,然后顺序执行
ExecStop指定 Unit 停止时要执行的 “命令” 或 “脚本”
ExecReload指定重新加载 Unit 时,要执行的 “命令” 或 “脚本”
Restart启动此选择后,服务将在 “进程退出” 后 “重新启动”,但 systemctl 命令将执行 “干净停止(clean stop)”
RemainAfterExit如果设置为 “True”,即使退出所有进程,该服务也会被视为活动状态
默认:False – 如果设置了 “Type=oneshot” 则此项特别有用
# 运行用户、用户组:
    - User=user -- 设置服务运行的用户
    - Group=user -- 设置服务运行的用户组

# Type 类型:
    - simple(默认)-- 以 ExecStart 字段启动的进程为主进程
    - forking -- ExecStart 字段以 fork() 方式启动,此时父进程讲退出,子进程称为主进程(后台运行)。【一般都设置为 forking】
    - oneshot -- 类似于 simple ,单只执行一次,systemd 会等他执行完成,再执行其他服务
    - dubs -- 类似于 simple ,但会等 D-Bus 信号后启动
    - notify -- 类似于 simple ,启动结束后会发出通知信号,然后 systemd 再启动其他服务
    - idle -- 类似于 simple ,等到其他任务都执行完,才会启动该服务

# EnvironmentFile:
    - 指定配置文件,和 "连词号(-)" 组合使用 -- 可以避免配置文件不存在的异常

# Environment:后面接多个不同 Shell 变量
    - Environment=ES_DATA=/usr/local/elasticsearch/data
    - Environment=ES_LOG=/usr/local/elasticsearch/log
    - Environment=ES_PID=/usr/local/elasticsearch/data/elasticsearch.pid
    - EnvironmentFile=-/usr/local/elasticsearch/xxxx.file

# 连词号 -- "(-)":
    - 在所有启动设置之前,添加的变量字段,都可以加上 "连词号"
    - 表示 "抑制错误",在发生错误时,不影响其他命令的执行
    - "EnvironmentFile=-/usr/local/elasticsearch/xxxx.file" -- 当文件不存在时,也不会抛异常

# KillMode 的类型:
    - control-group(默认) -- 当前控制组里的所有子进程,都会被杀掉
    - process -- 只杀主进程
    - mixed -- 主进程将收到 "SIGTERM 信号",子进程收到 "SIGKILL" 信号
    - none -- 没有进程会被杀掉,只是执行服务的 stop 命令

# Restart 的类型:
    - no(默认值) -- 退出后无操作
    - on-success -- 只有正常退出时(退出状态码 0),才会重启
    - on-failure -- 非正常退出,重启,包括被信号终止、超时等
    - on-abnormal -- 只有 "被信号终止""超时",才会重启
    - on-abort -- 只有 "收到没有捕获到的信号终止时",才会重启
    - on-watchdog -- 超时退出,才会重启
    - always -- 不管 "什么原因退出",都会重启
    # 对于 "守护进程" ,推荐使用 on-failure
    
# RestartSec 字段:
    - 表示 systemd 重启服务之前,需要等待的时间:RestartSec: 30 (单位: s)

# 各种 Exec* 字段:
    - Exec* 后面接的命令,仅接受 "指令 参数 参数.." 格式,不接收 "<> | &" 等特殊字符,很多 bash 语法也不支持,如果想支持 bash 语法,需要设置 Type=oneshot
    - ExecStart -- 启动服务时,执行的命令
    - ExecReload -- 重启服务时,执行的命令
    - ExecStop -- 停止服务时,执行的命令
    - ExecStartPre -- 启动服务前,执行的命令
    - ExecStopPost -- 停止服务后,执行的命令

# WantedBy 字段:
    - multi-user.target -- 多用户命令行状态,这个设置很重要
    - graphical.target -- 图形用户状态,依赖于 multi-user.target

# 文件限制:
    - file size -- LimitFSIZE=infinity
    - cpu time -- LimitCPU=infinity
    - virtual memory size -- LimitAS=infinity
    - locked-in-memory size -- LimitMEMLOCK=infinity
    - open files -- LimitNoFILE=64000
    - processes/threads -- LimitNPROC=64000

[Install] 模块

OptionDescription
Alias空格分隔 Unit 附加名称列表,大多数命令(不包括 “systemctl”、“systemctl enable”)可以使用别名而不是实际的 Unit 名称
RequiredBy,WantedBy当列出的服务被启动,此服务也会被启动
参考:“Wants Requires”、"[Unit]"
Also指定用户运行 “systemctl enable”、“systemctl disable” 时,要与 Unit 一起 “启用” 或 “禁用” 的 Unit 列表

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值