Linux中ansible模块补充和playbook讲解

一、模块使用

1.1 Yum模块

功能:管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本

参数说明
name要操作的软件包名称,支持通配符(如 httpd, nginx*),也可以是 URL 或本地 .rpm 文件路径。
state软件包状态: - present:安装(默认) - absent:卸载 - latest:安装最新版本
webow_downgrade是否允许降级安装指定版本的包(默认为否)。⚠️ 可能导致非幂等行为。
autoremove删除不再依赖的"叶"包(仅当 state=absent 或单独使用时有效)。
bugfix仅安装标记为 bugfix 的更新(配合 state=latest 使用)。
conf_file指定自定义的 yum 配置文件路径。
disable_excludes禁用 yum 配置中的排除规则(可选值:web, main, repoid)。
disable_gpg_check安装时是否禁用 GPG 校验(适用于测试环境)。
disablerepo操作期间临时禁用的仓库 ID(可以是逗号分隔字符串或列表)。
enablerepo操作期间临时启用的仓库 ID(可以是逗号分隔字符串或列表)。
download_only仅下载 RPM 包而不安装。
download_dir指定 RPM 包下载目录(配合 download_only 使用)。
exclude排除某些包不进行操作(例如:kernel*)。
instweb_weak_deps安装弱依赖项(仅限 yum >= 4,
ansible web -m yum -a 'name=httpd state=absent'
如 RHEL/CentOS 8)。
instwebroot指定替代根目录(用于 chroot 环境)。
list列出包信息(如 instwebed, updates, available 或具体包名)。
lock_timeout等待 yum 锁释放的最大时间(单位:秒)。

范例1:

ansible web -m yum -a 'name=httpd state=present'  #安装

范例2:

ansible web -m yum -a 'name=httpd state=absent'  #删除

1.2 Service模块

功能:管理服务

参数必填说明
name✅ 是要操作的服务名称(如 httpd, nginx)。
state否服务状态: - started:启动服务 - stopped:停止服务 - restarted:重启服务 - reloaded:重载配置
enabled否是否设置为开机自启(布尔值,yes/no)
pattern否如果服务不支持 status 命令,可指定一个进程名匹配字符串(用于检测是否运行)。
arguments否启动服务时传递的额外命令行参数。
runlevel否仅适用于 OpenRC 系统(如 Gentoo),指定服务所属 runlevel。
sleep否在 restarted 时,stop 和 start 之间等待秒数(部分 init 脚本需要)。
use否强制使用某个服务管理模块(如 systemd, sysv, openrc),默认自动识别。

范例1:

ansible web -m service -a 'name=httpd state=started enabled=yes'

范例2:

ansible web -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf"

1.3 User模块

功能:管理用户

参数必填说明
name✅ 是要操作的用户名(如 alice, bob)。
state否用户状态: - present:创建或更新用户(默认) - absent:删除用户
comment否设置用户的描述信息(GECOS 字段)。
home否设置用户的家目录路径。
shell否设置用户的登录 shell(如 /bin/bash)。
group否设置用户的主组(组名)。
groups否设置用户的附加组列表(逗号分隔字符串或列表)。 若为空字符串 '',则移除所有附加组。
append否如果为 yes,在现有附加组基础上添加新组;否则替换原有附加组。与 local 互斥。
create_home否是否创建用户家目录(默认为 yes)。
remove否当 state=absent 时,是否删除用户的家目录和邮件文件(相当于 userdel -r)。
force否强制删除用户(即使正在登录或拥有运行进程),仅在支持的系统上有效。
password否设置用户密码(需提供加密后的密码,如使用 mkpasswd 或 openssl 生成)。
generate_ssh_key否是否为用户生成 SSH 密钥对。
ssh_key_bits否指定生成的 SSH 密钥位数(默认 2048)。
ssh_key_type否指定 SSH 密钥类型(如 rsa, ed25519)。
expires否设置用户过期时间(以 Unix 时间戳表示)。仅限 Linux、FreeBSD 等支持平台。
system否是否创建为系统用户(UID 小于系统设定阈值)。
uid否指定用户的 UID。
login_class否设置 BSD 系统上的登录类(如 FreeBSD)。
local否强制使用本地命令(如 luseradd)操作本地用户数据库,适用于集中认证环境。与 groups 和 append 互斥。
move_home否若更改了 home,是否移动原家目录到新路径。

范例1:

ansible web -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'

1.4 Group模块

功能:管理组

参数必填说明
name✅ 是要操作的组名(如 developers, admins)。
state否组状态: - present:创建组(默认) - absent:删除组
gid否设置组的 GID(组 ID)。
non_unique否如果设置了 gid,允许使用非唯一 GID(仅限 Linux,不支持 macOS 或 BusyBox)。
system否若为 yes,则创建一个系统组(通常 GID 小于系统设定的阈值)。
local否强制使用本地命令(如 lgroupadd)来操作本地组数据库,适用于集中认证环境。

范例1:

#创建组
ansible web -m group  -a 'name=nginx gid=88 system=yes'
#删除组
ansible web -m group  -a 'name=nginx state=absent'

1.5 Lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换

功能:相当于sed,可以修改文件内容

参数必填说明
dest 或 path✅ 是要操作的目标文件路径。
state否行的状态: - present:确保该行存在(默认) - absent:删除匹配的行
regexp否正则表达式,用于匹配文件中的一行或多行。如果未提供,默认匹配整行内容。
line否(当 state=present 时必填)要插入或替换的文本行。
backup否修改前创建备份文件(带时间戳)。
create否如果文件不存在且 state=present,是否创建文件。
insertafter否当 state=present 且没有匹配到 regexp 时,在匹配该正则的 最后一行之后 插入新行。可使用 EOF 插入到文件末尾。
insertbefore否类似 insertafter,但在匹配的行 之前 插入。可使用 BOF 插入到文件开头。
firstmatch否若为 yes,在 insertafter 或 insertbefore 中只匹配第一个符合条件的行。
backrefs否若为 yes,允许 line 中使用正则捕获组(配合 regexp 使用),仅当匹配时替换并更新行。否则不修改文件。
group否设置文件所属的用户组。
owner否设置文件所属的用户。
mode否设置文件权限(如 0644, 0755)。
attributes否设置文件属性(如通过 chattr 设置的属性)。

范例:

ansible web -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=enforcing'"ansible web -m lineinfile  -a 'dest=/etc/fstab state=absent regexp="^#"'

1.6 Replace模块

该模块有点类似于sed命令,主要也是基于正则进行匹配和替换

参数必填说明
path✅ 是要操作的目标文件路径。
regexp✅ 是正则表达式,用于匹配需要替换的内容(Python 风格)。 使用 MULTILINE 模式:^/$ 匹配每行开头/结尾。
replace否替换后的内容,可以包含正则捕获组引用(如 \1, (?P<name>...))。若未设置,则匹配内容会被删除。
backup否若为 yes,在修改前创建带时间戳的备份文件。
after否只替换在此正则匹配内容之后的部分(配合 before 使用)。
before否只替换在此正则匹配内容之前的部分(配合 after 使用)。
encoding否文件的字符编码(如 utf-8, latin1 等)。
group否设置文件所属的用户组。
owner否设置文件所属的用户。
mode否设置文件权限(如 0644, 0755 或符号模式如 u=rw,g=r,o=r)。
attributes否设置文件属性(如通过 chattr 设置的属性)。

范例:

ansible web -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"  
ansible web -m replace -a "path=/etc/fstab regexp='^#(.*)' replace='\1'"

1.7 Setup模块

功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用.

但是如果主机较多,会影响执行速度,可以使用gather_facts: no来禁止 Ansible 收集 facts 信息

参数必填说明
filter否使用通配符(shell 风格,如 ansible_distribution*)过滤输出的 facts。
gather_subset否指定要收集的 fact 子集: - web:全部(默认) - min:最小基础信息 - hardware:硬件相关信息 - network:网络相关信息 - virtual:虚拟化信息 - facter / ohai:兼容 Puppet Facter 或 Chef Ohai 可使用 ! 排除子集,如 !network
gather_timeout否设置每个 fact 收集的最大时间(秒),防止因某些模块卡顿导致整体超时。
fact_path否自定义本地自定义 facts 脚本路径(.fact 文件),支持 JSON 或 INI 格式。

范例:

ansible web -m setup
ansible web -m setup -a "filter=ansible_nodename"
ansible web -m setup -a "filter=ansible_hostname"
ansible web -m setup -a "filter=ansible_domain"
ansible web -m setup -a "filter=ansible_memtotal_mb"
ansible web -m setup -a "filter=ansible_memory_mb"
ansible web -m setup -a "filter=ansible_memfree_mb"
ansible web -m setup -a "filter=ansible_os_family"
ansible web -m setup -a "filter=ansible_distribution_major_version"
ansible web -m setup -a "filter=ansible_distribution_version"
ansible web -m setup -a "filter=ansible_processor_vcpus"
ansible web -m setup -a "filter=ansible_web_ipv4_addresses"
ansible web -m setup -a "filter=ansible_architecture"
ansible web -m  setup  -a "filter=ansible_processor*"

范例:

[root@ansible ~]#ansible web  -m  setup -a 'filter=ansible_python_version'
10.0.0.7 | SUCCESS => {"ansible_facts": {"ansible_python_version": "2.7.5","discovered_interpreter_python": "/usr/bin/python"},"changed": false
}
10.0.0.6 | SUCCESS => {"ansible_facts": {"ansible_python_version": "2.6.6","discovered_interpreter_python": "/usr/bin/python"},"changed": false
}
10.0.0.8 | SUCCESS => {"ansible_facts": {"ansible_python_version": "3.6.8","discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false
}
[root@ansible ~]#

二、playbook介绍

2.1 介绍

playbook 剧本是由一个或多个“play”组成的列表。

play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。Task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作。

Playbook 文件是采用YAML语言编写的。

2.2 YAML 语言

YAMl 语言介绍

YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。

Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者,目前很多软件中采有此格式的文件,如:ubuntu,anisble,docker,k8s等。

YAML:YAML Ain’t Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)

YAML 语言特性

  • YAML的可读性好

  • YAML和脚本语言的交互性好

  • YAML使用实现语言的数据类型

  • YAML有一个一致的信息模型

  • YAML易于实现

  • YAML可以基于流来处理

  • YAML表达能力强,扩展性好

YAML语法简介

  • 在单一文件第一行,用连续三个连字号“-” 开始,还有选择性的连续三个点号( … )用来表示文件的结尾

  • 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能

  • 使用#号注释代码

  • 缩进必须是统一的,不能空格和tab混用

  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的 YAML文件内容是区别大小写的,key/value的值均需大小写敏感

  • 多个key/value可同行写也可换行写,同行使用,分隔

  • v可是个字符串,也可是另一个列表

  • 一个完整的代码块功能需最少元素需包括 name 和 task

  • 一个name只能包括一个task

  • YAML文件扩展名通常为yml或yaml

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。

其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔,下面介绍常见的数据结构。

List列表

列表由多个元素组成,每个元素放在不同行,且元素前均使用“-”打头,或者将所有元素用 [ ] 括起来放在同一行

范例:

fruits:- Apple- Orange- Strawberry- Mangofruits:[Apple,Orange,Strawberry,Mango]
Dictionary字典

字典由多个key与value构成,key和value之间用 :分隔,所有k/v可以放在一行,或者每个 k/v 分别放在不同行

范例:

name: John Smith
age: 41
gender: Male
spouse:name: Jane Smithage: 37gender: Female
children:- name: Jimmy Smithage: 17gender: Male- name: Jenny Smithage: 13gender: Female

 

2.3 Playbook核心元素

  • Hosts 执行的远程主机列表

  • Tasks 任务集

  • Variables 内置变量或自定义变量在playbook中调用

  • Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件

  • Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行

  • tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

hosts 组件

Hosts:playbook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中

案例:

- hosts: web:appsrvs

remote_user 组件

remote_user: 可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户

- hosts: webremote_user: jyxtasks:- name: test connectionping: remote_user: sp sudo: yes sudo_user: wang 

task列表和action组件

play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个task后,再开始第二个task

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。

模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致

每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。

如果未提供name,则action的结果将用于输出

task两种格式:

(1) action: module arguments

(2) module: arguments 建议使用

注意:shell和command模块后面跟命令,而非key=value

范例:

---
- hosts: webremote_user: roottasks:- name: instweb httpdyum: name=httpd- name: start httpdservice: name=httpd state=started enabled=yes

其它组件

某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers

任务可以通过"tags“打标签,可在ansible-playbook命令上使用-t指定进行调用

ShellScripts VS Playbook 案例

#SHELL脚本实现
#!/bin/bash
# 安装Apache
yum install -y httpd 
# 复制配置文件
cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
cp/tmp/vhosts.conf /etc/httpd/conf.d/
# 启动Apache,并设置开机启动
systemctl enable --now httpd #Playbook实现
---
- hosts: webremote_user: roottasks:- name: "安装Apache"yum: name=httpd- name: "复制配置文件"copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/- name: "复制配置文件"copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.d/- name: "启动Apache,并设置开机启动"service: name=httpd state=started enabled=yes

2.4 playbook 命令

格式

ansible-playbook <filename.yml> ... [options]

常见选项

-C --check          #只检测可能会发生的改变,但不真正执行操作
--list-hosts        #列出运行任务的主机
--list-tags         #列出tag
--list-tasks        #列出task
--limit 主机列表      #只针对主机列表中的主机执行
-v -vv  -vvv        #显示过程

范例:

ansible-playbook  file.yml  --check #只检测
ansible-playbook  file.yml  
ansible-playbook  file.yml  --limit web

Playbook 初步
利用 playbook 创建 mysql 用户

范例:mysql_user.yml

---
- hosts: dbremote_user: roottasks:- name: create groupgroup: name=mysql system=yes gid=306- name: create useruser: name=mysql shell=/sbin/nologin system=yes group=mysql uid=306 home=/data/mysql create_home=no      
利用 playbook 安装 nginx

范例:instweb_nginx.yml

---
# instweb nginx 
- hosts: webremote_user: root  tasks:- name: add group nginxgroup: name=nginx state=present- name: add user nginxuser: name=nginx state=present group=nginx- name: Instweb Nginxyum: name=nginx state=present- name: web pagecopy: src=files/index.html dest=/usr/share/nginx/html/index.html- name: Start Nginxservice: name=nginx state=started enabled=yes

利用 playbook 安装和卸载 httpd

范例:instweb_httpd.yml

---
#instweb httpd 
- hosts: webremote_user: rootgather_facts: notasks:- name: Instweb httpdyum: name=httpd state=present- name: Instweb configure filecopy: src=files/httpd.conf dest=/etc/httpd/conf/- name: web htmlcopy: src=files/index.html  dest=/var/www/html/- name: start serviceservice: name=httpd state=started enabled=yesansible-playbook   instweb_httpd.yml --limit 10.0.0.8

范例:remove_httpd.yml

#remove_httpd.yml
---
- hosts: webremote_user: roottasks:- name: remove httpd packageyum: name=httpd state=absent- name: remove apache user user: name=apache state=absent- name: remove config filefile: name=/etc/httpd  state=absent- name: remove web htmlfile: name=/var/www/html/index.html state=absent

利用 playbook 结合shell安装mysql

[root@ansible ~]#cat /data/ansible/instweb_mysql.yml
---
# instweb mysql-8
- hosts: dbremote_user: rootgather_facts: notasks:- name: copy shellscript: /soft/instweb_mysql.sh

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

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

相关文章

唐代大模型:智能重构下的盛世文明图谱

引言&#xff1a;当长安城遇见深度学习 一件唐代鎏金舞马衔杯银壶的虚拟复原品正通过全息投影技术演绎盛唐乐舞。这个跨越时空的场景&#xff0c;恰似唐代大模型技术的隐喻——以人工智能为纽带&#xff0c;连接起长安城的盛世气象与数字时代的文明重构。作为人工智能与历史学…

国产ARM/RISCV与OpenHarmony物联网项目(三)网关设备控制

一、设备控制界面与功能设计 程序界面运行与设计效果如下: 设备控制相关程序调用关系图如下&#xff1a; 其中device_control.html程序为网页界面显示程序&#xff0c;led_alarm.cgi程序为光线数据的报警超限数据设置与管理&#xff0c;led_control.cgi程序功能为对Led灯的开…

微信小程序反编译实战教程

在实际渗透测试或安全分析中&#xff0c;经常会遇到微信小程序中的签名加密&#xff08;sign&#xff09;机制&#xff0c;这些机制大多具备防重放、防篡改的特性&#xff0c;导致我们在抓包时难以直接复现请求。 &#x1f50d; 另一方面&#xff0c;一些小程序的代码中往往会…

【NLP入门系列三】NLP文本嵌入(以Embedding和EmbeddingBag为例)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…

文心一言(ERNIE Bot):百度打造的知识增强大语言模型

1. 产品概述 文心一言&#xff08;ERNIE Bot&#xff09;是百度自主研发的知识增强大语言模型&#xff0c;于2023年3月16日正式发布&#xff0c;对标OpenAI的ChatGPT&#xff0c;具备文本生成、多模态交互、逻辑推理、中文理解等能力。该模型基于百度的飞桨深度学习平台和文心…

Java-49 深入浅出 Tomcat 手写 Tomcat 实现【02】HttpServlet Request RequestProcessor

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月13日更新到&#xff1a; AI炼丹日志-28 - Aud…

在VB.net中,文本插入的几个自定义函数

一、如果你是高手&#xff0c;一定“识货”&#xff0c;分享给你 二、可应用于文本插入的几种方式&#xff1a;6种 三、需要用到以下的几个函数&#xff1a; 上代码&#xff1a; Module TextModule <summary> 在指定位置插入文本 </summary> <p…

QC -io 服务器排查报错方式/报错: Failed to convert string to integer of varId variable!“

进断点控制台有报错之后&#xff0c;复制报错信息到 头部菜单栏 1.编辑 -> 2.Find/Replace ->3.Advanced Find ->4. Project“xxxxx” 能找到问题点 再分析定位 在排查报错时候&#xff0c;进入了这个报错&#xff0c;msgInfo "MyTcpRedis: Failed to conver…

c++中auto与decltype使用

在 C11及后续版本中&#xff0c;关键字auto和decltype都是用于类型推导的&#xff0c;但它们的使用场景和行为有所不同。 1. auto 关键字 作用 auto 用于自动推导变量的类型&#xff0c;由编译器根据初始化表达式来确定。 常见用法 // 基本用法 auto x 42; // int…

LabVIEW机器视觉零件检测

基于LabVIEW 图形化编程平台与机器视觉技术&#xff0c;构建集图像采集、处理、尺寸计算与合格性分析于一体的自动化检测方案。通过模块化硬件架构与自适应算法设计&#xff0c;实现对机械零件多维度尺寸的非接触式高精度测量&#xff0c;相比人工检测效率提升 12 倍&#xff0…

大数据治理域——实时数据开发

摘要 本文深入探讨了大数据治理域中的实时数据开发&#xff0c;重点介绍了流式数据处理的核心价值、特点、技术挑战、典型能力和应用场景。同时&#xff0c;详细阐述了流式技术架构&#xff0c;包括数据采集、处理、存储和服务等环节&#xff0c;并针对大促场景提出了相应的技…

Halcon/C# 图像窗口、读取图片及仿射变换

一、Halcon 清理窗口 清除图像窗口的显示。 dev_clear_window() 二、Halcon 读取图片 (一) 读取一张图片 read_image (Image, printer_chip/printer_chip_01)Image&#xff1a;&#xff08;输出参数&#xff09;读取到的图片变量名 第二个参数&#xff1a;图片路径&#xf…

Nginx 反向代理服务和安装docker-compose

Nginx 反向代理服务和安装docker-compose Nginx Proxy Manager 他是一个可视化的nginx的反向代理神器&#xff0c;动动手指轻松的配置Nginx&#xff0c;我们可以通过一些网页&#xff0c;即可完成网站的代理配置&#xff0c;无需在动手安装Nginx&#xff1b; dockoer-compose部…

FPGA基础 -- Verilog 锁存器简介

由浅入深地讲解 Verilog 中的锁存器&#xff08;Latch&#xff09;**&#xff0c;包括&#xff1a; 什么是锁存器&#xff08;定义与作用&#xff09;锁存器的分类&#xff08;透明锁存器 vs 边沿触发器&#xff09;Verilog 中锁存器的建模方式锁存器与触发器的区别锁存器的时…

Eclipse Memory Analyzer (MAT) 相关配置调整

一、JDK版本过低提示 已安装高于 jdk 17 的版本依旧提示 jdk 版本过低&#xff0c;打开MAT的安装目录&#xff0c;在配置文件 MemoryAnalyzer.ini 中添加配置指向JDK即可。新增两行配置&#xff1a; -vm D:/jdk_21.0.7/bin/javaw.exe //jdk安装路径 bin 目录下的javaw.exe二…

机器学习常用评估指标

机器学习常用评估指标 机器学习的评价指标有精度、精确率、召回率、P-R曲线、F1 值、TPR、FPR、ROC等指标&#xff0c;还有在生物领域常用的敏感性、特异性等指标。 基础 在分类任务中&#xff0c;各指标的计算基础都来自于对正负样本的分类结果&#xff0c;用混淆矩阵表示&…

视频相似度检测算法(带课设报告)

摘 要 本文提出了一种基于关键帧特征提取的视频相似度检测方法&#xff0c;通过融合自适应采样与特征降维技术实现高效准确的视频内容比对。系统采用三阶段处理流程&#xff1a;首先对输入视频进行自适应关键帧采样&#xff0c;通过均匀间隔算法提取固定数量&#xff08;默…

微服务江湖的爱恨情仇:Spring Cloud 与 Kubernetes 的双雄演义

引言&#xff1a;双雄并立&#xff0c;一个时代的序幕 微服务革命&#xff0c;如同一场燎原之火&#xff0c;将庞大、笨重的单体应用烧成灰烬&#xff0c;宣告了一个敏捷、独立、快速迭代的新纪元。然而&#xff0c;这场革命在摧毁旧世界的同时&#xff0c;也催生了一片混沌的新…

深度拆解RAGFlow分片引擎之切片实现

上一篇深度拆解RAGFlow分片引擎&#xff01;3大阶段视觉增强&#xff0c;全网最硬核架构解析 讲了切片的整体流程&#xff0c;今天我们来拆下切片的实现。 我们在设置的时候&#xff0c;可以选择切片方法。这个参数是parser_id 在创建知识库的时候&#xff0c;选择对应的切片方…

CSS平滑滚动效果实现方法

一、纯CSS实现方案 使用 scroll-behavior 属性 属性值 auto (默认值)&#xff1a;滚动框立即滚动smooth&#xff1a;滚动框以平滑的方式滚动 /* 全局平滑滚动 */ html {scroll-behavior: smooth; }/* 特定容器平滑滚动 */ .scroll-container {scroll-behavior: smooth;over…