文章详情页 您现在的位置是:网站首页>文章详情

编写systemd的service

图片丢失 Jeyrce.Lu 发表于:2021年3月5日 15:59 分类:【服务器 3355次阅读

什么是sevice

Systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由Systemd 控制或监视的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。

Systemd 广泛应用于新版本的RHEL、SUSE Linux Enterprise、CentOS、Fedora和openSUSE中,用于替代旧有的服务管理器service。

基本操作命令:

systemctl command xxx.service
# 其中command可以是start、stop、restart、enable等,比如:
systemctl start httpd.service #启动Apache服务
systemctl stop httpd.service #停止Apache服务
systemctl restart httpd.service #停止Apache服务
systemctl enable mariadb.service #将MariaDB服务设为开机启动

为什么要用service

我们在进行操作系统采用传统的服务部署(指的是和docker、k8s容器这样的相比直接在操作系统运行的进程)时会用到各种进程托管方式,例如我们一直使用supervisord、nohup、screen等让程序一直在后台处于daemon的方式运行,所有的方式可分为系统自带工具和第三方工具。第三方工具往往功能强大操作简单,而系统自带工具相对来说功能可能偏少一些。但是第三方工具存在的缺点是需要安装解决依赖问题,在我们多数要求严格的客户机房内网环境中,解决依赖是一件非常头痛的事情。随着centos、redhat7.x版本系统以后,systemd已经成为一种功能强大操作简单系统默认的进程管理工具,非常适合用于在操作系统中部署服务。

service编写示例

# Created by Jeyrce.Lu 2021-02-23 16:39 PM.
# https://www.freedesktop.org/software/systemd/man/systemd.unit.html
# 自定义控制单元: 描述单元元数据、配置、和其他单元的关系
[Unit]
# 服务单元描述,可根据需要任意填写
Description=Prometheus Server
 
# 文档地址
Documentation=https://prometheus.io/docs/introduction/overview/
 
# 本单元启动后,尝试拉起want单元,拉起是否成功对自身无影响
Wants=network-online.target
 
# 本单元想启动必须依赖于require的单元全部启动[一般不使用]
#Requires=
 
# 绑定单元,如果bindsto单元退出则本单元也退出
#BindsTo=
 
# 本单元启动失败,则启动onfailure定义的单元
#OnFailure=
 
# Before/After 指定启动单元的顺序[不涉及单元依赖]
After=network.target
 
# 排除单元,conflict单元不能和本单元同时运行
#Conflicts=
 
# 运行条件ConditionXXX,本单元运行必须满足的条件
#ConditionUser=
 
# 运行条件AssertXXX,本单元运行必须满足的条件,否则报错
#AssertCPUs=
 
# Service配置: 只有Service类型的单元才有此区块
[Service]
# 服务类型,可选:simple、forking、oneshot、dbus、notify、idle、
# simple: 默认值,启动程序即为程序主体
# forking: 标准Unix Daemon模式,调用系统fork函数,留下守护精灵子进程
# oneshot: 一次性执行任务可以搭配RemainAfterExit=yes使用[进程不存在也认为执行成功了]。此类型支持多条命令(;分割\换行)执行
# dbus: 运行需要获取一块DBus空间,需要搭配BusNmae=一起使用,成功获取DBus空间后程序启动
# notify: 本单元启动完毕通知systemd,之后systemd启动其他单元
# idle: 等待systemd在空闲时再启动本单元,优先启动其他单元
Type=simple
 
# 单元运行的用户
User=sendoh
 
# 单元运行的属组
Group=sendoh
 
# 启动本单元之前执行的命令
#ExecStartPre=
 
# systemctl start xxx 的时候使用的命令
ExecStart=/home/sendoh/qdm/holmes/holmes/prometheus/prometheus \
          --config.file=/home/sendoh/qdm/holmes/holmes/prometheus/prometheus.yml \
          --web.listen-address=0.0.0.0:10011 \
          --web.read-timeout=5m \
          --web.max-connections=512 \
          --web.external-url=http://0.0.0.0:10011/prometheus \
          --web.enable-lifecycle \
          --web.enable-admin-api \
          --web.page-title="Holmes" \
          --web.cors.origin=".*" \
          --storage.tsdb.retention.time=90d \
          --storage.tsdb.path=/home/sendoh/qdm/holmes/holmes/prometheus/data/ \
          --rules.alert.for-outage-tolerance=1h \
          --rules.alert.resend-delay=1m \
          --alertmanager.notification-queue-capacity=1000 \
          --alertmanager.timeout=10s \
          --query.lookback-delta=31m \
          --query.timeout=2m \
          --query.max-concurrency=20 \
          --query.max-samples=10000000 \
          --log.level=debug \
          --log.format=logfmt
 
 
# 启动本单元之后执行的命令
ExecStartPost=/usr/bin/echo "Prometheus start succeed."
 
# systemctl stop xxx 的时候使用的命令
#ExecStop=/home/sendoh/holmes/phoenix --stop
 
# 停止本单元后执行的命令
ExecStopPost=/usr/bin/echo "Prometheus stopped."
 
# systemctl restart xxx 的时候使用的命令
ExecReload=/usr/bin/kill -HUP $(/usr/bin/pgrep prometheus)
 
# 重启策略: no、always、on-success、on-failure、on-abnormal、on-abort、on-watchdog
Restart=always
 
# 重启服务需要等待的时间
RestartSec=5
 
# 指定环境变量: 可以等号后增加-抑制错误
#Environment=
 
# 环境变量文件
#EnvironmentFile=
 
# 安装服务: 定义单元如何启动、是否开机自启
[Install]
# 服务被哪些target装载,当unit被enable时符号连接放入/etc/systemd/system/target名.wants/
WantedBy=multi-user.target
 
# 服务被哪些target需要,当unit被enable时符号连接放入/etc/systemd/system/target名.required/
#RequiredBy=
 
# 本单元可以用于启动的别名
Alias=Prometheus
 
# 服务激活关联,本单元被enable时会被同时激活的其他unit
#Also=

启用service

将上述phoenix.service文件放入  /usr/lib/systemd/system/ 下执行 systemctl daemon-reload之后就可以对service进行start  stop 等操作了。


版权声明 本文属于本站  原创作品,文章版权归本站及作者所有,请尊重作者的创作成果,转载、引用自觉附上本文永久地址: http://blog.lujianxin.com/x/art/dovhvqvv29g7

文章评论区

作者名片

图片丢失
  • 作者昵称:Jeyrce.Lu
  • 原创文章:61篇
  • 转载文章:3篇
  • 加入本站:2058天

站点信息

  • 运行天数:2060天
  • 累计访问:164169人次
  • 今日访问:0人次
  • 原创文章:69篇
  • 转载文章:4篇
  • 微信公众号:第一时间获取更新信息