systemd[基础]

一、概述

systemd是一个系统和服务管理器,systemd是Linux系统中一套基本的构建模块,提供了一系列工具的集合,其核心功能包括:

  1. 初始化系统:在系统启动时接管 init 进程(PID=1),负责启动其他进程。
  2. 管理服务:通过配置文件(Unit 文件)管理系统的服务、挂载点、设备等资源。
  3. 优化启动速度:支持并行启动服务,显著减少系统启动时间。
  4. 依赖管理:自动处理服务之间的依赖关系,确保启动顺序正确。

与传统 init 系统相比,systemd 提供了更高的灵活性和效率。

systemctl是一个命令行工具,用于与systemd进行交互。通过systemctl,用户可以启动、停止、重启、查看状态以及管理系统中的服务单元。systemd作为后台服务运行,而systemctl则提供了用户与systemd交互的接口。用户通过systemctl发送指令,systemd执行相应的操作。

systemd通过单元文件(Unit files)来描述和管理不同的系统资源和服务。Systemd 支持的 12 种 Unit 文件类型。下面就将常用到的Service单元文件展开说明。

二、service文件

定义软件服务的文件通常是systemd服务单元文件,具有.service后缀,这些文件通常位于以下目录

# 系统或用户自定义的配置文件
/etc/systemd/system/
# 软件运行时生成的配置文件
/run/systemd/system
# 系统或第三方软件安装时添加的配置文件。
/usr/lib/systemd/system

Systemd 默认从目录 etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 usr/lib/systemd/system/,真正的配置文件存放在那个目录。

1、service组成部分

service文件主要三大模块

[Unit]:  #定义与Unit类型无关的通用选项,用于提供unit的描述信息、unit行为及依赖关系等

[Service]: #定义如何启动、停止、重启当前服务。

[Install]: #定义如何安装这个配置文件,即怎样做到开机启动。

2、Unit部分

Description:    # 对服务的简单描述
After:      # 在哪些服务之后启动
Before:     # 在哪些服务器启动之前启动
Requires:    # 可以指定服务依赖于哪些服务(强依赖)
Wants:     # 可以指定服务依赖于哪些服务(弱依赖)

3、Service部分

EnvironmentFile:  # 指定当前服务启动的环境变量
ExecStart:  # 指定服务启动时执行的命令或脚本
ExecStop:   #  指明停止服务要运行的命令或脚本
RestartSec:    # 指定服务在重启时等待的时间,单位为秒
ExecReload:    # 指明重启服务要运行的命令或脚本
Restart:     # 重启设置
KillMode:    # 指定停止的方式
Restart:    # 指定重启时的类型
Type:     # 指定启动类型

type的可选值

simple  # 指定ExecStart字段的进程为主进程
forking  # 指定以fork() 子进程执行ExecStart字段的进程
oneshot  # 执行一次
notify  # 启动后发送会发送通知信号通知systemd
idle  # 等其他任务结束后才运行

Restart的可选值

no:    # 退出后不会重启
on-success:    # 当进程正常退出时(退出码为0) 执行重启
on-failure:    # 当进程不正常退出时(退出码不为0) 执行重启
on-abnormal:   # 当被信号终止和超时执行重启on-abort: 当收到没有捕捉到的信号终止时执行重启
on-watchdog:   # 当看门狗超时时执行重启
always:        # 一直重启

KillMode可选值

control-group:   # 杀掉当前进程中所有的进程
process:      # 杀掉当前进程的主进程
mixed:    # 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:    # 不杀掉任何进程

4、Install部分

Alias:    # 别名,可使用systemctl command Alias.service
RequiredBy:   # 被哪些units所依赖,强依赖
WantedBy:   # 被哪些units所依赖,弱依赖
Also:   # 安装本服务的时候还要安装别的相关服务
Install:  # 一般填为WantedBy=multi-user.target

5、eg:阿里云服务 

[Unit] 部分

这部分定义了单元的基本属性和依赖关系。

  1. Description=阿里云助手

    • 提供服务的描述信息,方便用户和管理员了解该服务的用途。
  2. ConditionFileIsExecutable=/usr/local/share/aliyun-assist/2.2.3.204/aliyun-service

    • 这是一个条件指令,只有在指定的文件是可执行文件时,该单元才会被启动。
  3. After=network-online.target

    • 指定该服务在 network-online.target 之后启动。network-online.target 是一个目标单元,表示网络已经在线。
  4. Wants=network-online.target

    • 表示该服务依赖于 network-online.target,但即使 network-online.target 失败,该服务也不会被标记为失败。

[Service] 部分

这部分定义了服务的具体行为和启动参数。

  1. StartLimitInterval=3600

    • 设置启动限制的时间间隔为 3600 秒(1 小时)。
  2. StartLimitBurst=10

    • 在 StartLimitInterval 时间内,允许启动失败的次数为 10 次。
  3. ExecStart=/usr/local/share/aliyun-assist/2.2.3.204/aliyun-service

    • 指定服务的启动命令,这里是 /usr/local/share/aliyun-assist/2.2.3.204/aliyun-service
  4. Restart=on-failure

    • 指定服务在失败时自动重启。
  5. RestartSec=120

    • 设置服务重启前的等待时间为 120 秒。
  6. EnvironmentFile=-/etc/sysconfig/aliyun

    • 指定一个环境文件,该文件中的环境变量会被加载到服务进程中。- 前缀表示如果文件不存在,则忽略该指令。
  7. KillMode=process

    • 指定终止服务的模式为 process,即只终止主进程。

[Install] 部分

这部分定义了服务如何安装和启用。

  1. WantedBy=multi-user.target
    • 指定该服务在 multi-user.target 目标下启用。multi-user.target 是一个常见的运行级别,表示多用户模式。

总结

这个配置文件定义了一个名为 “阿里云助手” 的服务,该服务在系统启动时依赖于网络在线状态,并在网络在线后启动。服务在失败时会自动重启,并且会加载指定的环境文件中的环境变量。服务在多用户模式下启用,并遵循一定的启动限制和重启策略。

 三、常用的service文件样例

以下文件均默认服务器上已安装相关服务或依赖。

1、Nginx服务:

[Unit]Description=The nginx web and reverse proxy server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
#制定NG家目录
NG_HOME=/user/local/nginx
#启动检测命令
ExecStartPre=$NG_HOME/sbin/nginx -t
#启动命令
ExecStart=$NG_HOME/sbin/nginx -c $NG_HOME/conf/nginx.conf
#重载配置文件命令
ExecReload=$NG_HOME/sbin/nginx -s reload
#停止命令
ExecStop=$NG_HOME/sbin/nginx -s quit

[Install]
WantedBy=multi-user.target

 2、Tomcat服务

 1、设置权限:

  将 Tomcat 目录的所有权分配给一个专用的用户(例如 tomcat):

groupadd -r tomcat
useradd -r -d /opt/tomcat -s /bin/nologin tomcat
chown -R tomcat:tomcat /opt/tomcat

2、创建 systemd 服务文件

创建并编辑服务文件

在 /etc/systemd/system/ 目录下创建一个名为 tomcat.service 文件

   [Unit]
   Description=Apache Tomcat Web Application Container
   After=syslog.target network.target

   [Service]
   Type=forking
   Environment=JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
   Environment=CATALINA_HOME=/opt/tomcat
   Environment=CATALINA_BASE=/opt/tomcat
   ExecStart=/opt/tomcat/bin/startup.sh
   ExecStop=/opt/tomcat/bin/shutdown.sh
   User=tomcat
   Group=tomcat
   Restart=on-failure
   RestartSec=10

   [Install]
   WantedBy=multi-user.target
  • 说明
    • JAVA_HOME:指定 JDK 的安装路径。
    • CATALINA_HOME 和 CATALINA_BASE:指定 Tomcat 的安装目录。
    • ExecStart 和 ExecStop:指定启动和停止 Tomcat 的脚本。
    • User 和 Group:指定运行 Tomcat 的用户和组。
    • Restart=on-failure:在服务失败时自动重启。

3、应用:

重新加载 systemd 配置

   sudo systemctl daemon-reload

启动 Tomcat 服务

   sudo systemctl start tomcat

查看服务状态

   sudo systemctl status tomcat

设置开机自启动

   sudo systemctl enable tomcat

启动服务:

关停服务:

4、注意事项:

环境变量
如果需要设置 JVM 参数,可以在 Tomcat 的 bin/setenv.sh 文件中添加:

   export CATALINA_OPTS="-Xms512m -Xmx1024m"

四、systemctl命令合集


#启动服务
systemctl start name.service
#停止服务
systemctl stop name.service
#重启服务
systemctl restart name.service
#查看服务状态
systemctl status name.service
#禁止自动和手动启动
systemctl mask name.service
#取消禁止
systemctl unmask name.service
#查看某服务当前激活与否的状态
systemctl is-active name.service
#查看所有已经激活的服务
systemctl list-units --type|-t service
#查看所有服务
systemctl list-units --type service --all
#设定某服务开机自启,相当于chkconfig name on
systemctl enable name.service
#设定某服务开机禁止启动:相当于chkconfig name off
systemctl disable name.service
#查看所有服务的开机自启状态,相当于chkconfig --list
systemctl list-unit-files --type service
#用来列出该服务在哪些运行级别下启用和禁用:chkconfig –list namels etc/systemd/system/*.wants/name.service
#查看服务是否开机自启
systemctl is-enabled name.service
#列出失败的服务
systemctl --failed --type=service
#查看服务的依赖关系
systemctl list-dependencies name.service
#杀掉进程
systemctl kill unitname
#重新加载配置文件
systemctl daemon-reload
#关机
systemctl halt
#重启服务器
systemctl reboot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值