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

Ansible自动化运维以及模块使用

ansible的作用:

  1. 远程操作主机功能

  2. 自动化运维(playbook剧本基于yaml格式书写)

ansible是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机操作。只要有一台ansible主机,就可以对所有节点操作

ansible不需要agent,客户端。只需要一台主机配置了ansible即可。

ansible基于模块进行工作,只是提供了一种运行的架构。执行操作和辩证的是ansible的模块来实现的。例如:copy模块、service模块

ansible默认是通过ssh的密钥队实现通信(可以自定义,但是一般不更改)

Ansible的特点:

所有模块都是幂等性

所谓幂等性指的是多次操作或者多次执行对系统资源的影响是一致的

例如:

systemctl stop firewalld之后再执行一次这个命令。只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变任何结果。

但是systemctl restart firewalld这样的命令每一次操作都会先停止再启动。所以它不属于幂等性。

http的get这样的命令也属于幂等性

post不属于幂等性。即便多次执行相同的post可以创建多个相同的资源。虽然数据相同,但是也创建了不同的资源。

ansible的幂等性决定了可以重复执行某个任务,绝大多数情况下不会对结果产生任何影响(不绝对)

Ansible的四大组件

  • 1、 lnventory主机清单:又叫主机组。定义ansible可以远程操作的服务器。可以理解为声明哪些机器是ansible可以操作的。
  • 2、 模块:常用的模块有13个。通过这些模块可以实现远程的配置和操作。
  • 3、 Plugins插件
  • 4、 Playbook剧本:可以理解为shell脚本。但是格式是yaml格式。

Ansible的优缺点

优点:

  • 1、 部署很简单,主要在控制主机部署即可。被控制的主机需要有ssh和python2.5以上版本。基本上Linux都是自带的。
  • 2、 ansible只能控制Linux系统,无法控制Windows系统。是专门为Linux系统打造的。
  • 3、基于模块工作。可以使用任意语言开发模块(二次开发,底层架构)

ansible的命令格式

语法:

ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)'

ansible的模块

1、 command模块

在远程主机上执行Linux的命令,不支持管道符,重定向输出。只能在目标主机上执行一般的Linux命令

ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有声明的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有声明的主机都会执行这个命令

如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向

ansible 20.0.0.20 -a 'date'
#只能执行一般的命令。不支持管道和重定向

如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向

ansible 20.0.0.20 -a 'date'
#只能执行一般的命令。不支持管道和重定向

2、 shell模块

在远程主机执行命令,相当于在执行shell命令,支持管道符和重定向

ansible 20.0.0.20 -m shell -a 'useradd test'
#远程创建用户
ansible 20.0.0.20 -m command -a 'cat /etc/password'
ansible 20.0.0.20 -m shell -a 'echo 123456 | passwd --stdin test'
#给test用户创建密码
ansible 20.0.0.20 -m shell -a "echo $(ifconfig ens33 | awk 'NR==2{print $2}')"

ansible无法执行交互的命令

在Ansible当中多个引号之间要做隔离

指定主机上创建一个脚本,在脚本中写入一个内容 #!/bin/bash ifconfig。然后运行这个脚本

ansible 20.0.0.30 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'

ansible 20.0.0.30 -m shell -a 'echo -e "#!/bin/bash\na=$((2+3))\necho \$a" > /opt/test.sh && sh /opt/test.sh'

3、 cron模块

远程给主机设置定时任务

两种状态:

present:表示添加(默认就是添加,可以省略)

absent:表示移除。absent在整个ansible的语法中都表示移除

分:minute

时:hour

日:day

月:mounth

周:weekday

job:任务执行的命令

name:任务计划的名称

ansible 20.0.0.20 -m cron -a 'minute="*/5" job="ls /opt/" name="test1"'
ansible 20.0.0.20 -a 'crontab -l'

远程删除定时任务

ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="test1" state=absent'
#state=absent:声明状态为删除
ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="None" state=absent'
#如果名字是None直接删除None
#如果有多个None会都被删除

多个计划任务,如果不给名字都是None,一旦删除None,会全部删除。所以不删除(最好是指定一个不重复的名字)

4、 user模块

用户管理模块

常见参数:

name:指定用户名,必须要有

两种模式state:present absent

创建用户可以不加present,但是删除一定要加absent

system=yes | no:标记用户是否是一个程序用户。如果是yes表示是程序用户

还需要使用shell=yes声明程序用户使用的shell

uid:用户的唯一标识

group:用户的所在组

create_home=yes | no:替换用户的家目录。yes表示替换。如果不需要替换用户家目录可以不写

password:创建用户的密码

comment:用户的注释信息。可有可无

remove=yes | no:当删除用户时,加上rmove=yes表示删除用户的家目录。可以理解为userdel -r 如果不需要删除家目录,可以不写。

ansible 20.0.0.20 -m user -a 'name=zygg system=yes'
ansible 20.0.0.20 -a "cat /etc/passwd"

在创建用户时虽然声明了是一个程序用户,但是默认的登录shell如果没有额外声明,还是默认的/bin/bash。但是uid会按照程序用户指定。

ansible 20.0.0.20 -m user -a 'name=zygg1 shell=/sbin/nologin'
#声明用户的shell

使用ansible的user模块创建用户时,如果创建普通用户,可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash。如果创建的是程序用户,一定要声明system=yes同时声明shell的类型shell=/sbin/nologin。

也可以指定uid的方式给用户分配一个uid

ansible 20.0.0.20 -m user 'name=zygg2 uid=1010 password="123456" home=/opt/test1'
ansible 20.0.0.20 -a 'cat /etc/passwd'
ansible 20.0.0.20 -m user -a 'name=zygg2 home=/home/zygg2 create_home=yes'
#home=/home/zygg2:声明跟新后家目录的位置
#create_home=yes:表示需要更改

删除指定用户

ansible 20.0.0.20 -m user -a 'name=zygg2 remove=yes state=absent'
#声明删除用户且一并删除家目录可以理解为userdel -r

5、 group模块

用户组管理模块

name:指定名称必须要有

gid:设置组id

ansible 20.0.0.30 -m group -a 'name=zyg gid=306 system=yes'
#创建一个组而不是用户
ansible 20.0.0.30 -a 'cat /etc/group'

添加用户时候指定组

ansible 20.0.0.30 -m user -a 'name=zygg uid=1011 group=zyg'
#创建用户并指定组
ansible 20.0.0.30 -a 'cat /etc/passwd'
ansible 20.0.0.30 -a 'tail -f /var/log/messges'
systemctl restart firewalld

ansible不适用交互式的命令

删除组

ansible 20.0.0.30 -m user -a 'name=zygg remove=yes state=absent'
ansible 20.0.0.30 -m group -a 'name=zyg state=absent'

6、 ping模块

远程测试主机的连通性

ping

ansible 20.0.0.20 -m ping

7.hostname模块

ansible 20.0.0.30 -m hostname -a 'name=docker2'
ansible 目标IP -m hostname -a 'name=主机名'

8.copy模块

用于复制指定的主机文件到远程主机的模块

常用的模块参数: dest:指出要复制的文件在哪,必须使用绝对路径。如果源目标是目录,指目标也得是目录。如果目标文件不存在,会覆盖原有内容。

dest 指出要复制的文件在哪,必须使用绝对路径。如果源目标是目录,指目标也得是目录。如果目标文件不存在,会覆盖原有内容。
src 复制文件的源,最好使用绝对路径,源目标是目录,指目标也得是目录
owner 指定文件的所有者
group 指定文件的所在组
content 从主机复制指定的内容到目标主机,content不能与src一起使用
mode 指定复制之后的文件的权限

在目标主机创建一个用户,system=yes,shell 是nologin,从主机复制一个文件ky32.txt 所有者,所在组都属于guoqi,权限是600

ansible 20.0.0.20 -m user -a 'name=guoqi shell=/sbin/nologin system=yes group=guoqi'

目录中得有文件,否则目录无法复制过去

ansible 20.0.0.30 -m copy -a 'content="hello world!" dest=/opt/hello.txt'
相当于echo

ansible有copy但是没有mv

9.file模块

管理文件属性

owner

group

mode

state=link 创建链接文件

state=touch 创建文件

state=absent 删除文件

file模块创建一个文件,ky32.txt 所有者和所在组hj,权限700

ansible 20.0.0.30 -m file -a 'path=/opt/hj state=touch'ansible 20.0.0.30 -m file -a 'owner=hj group=hj mode=777 path=/opt/hj'

如何设置链接文件

ansible 20.0.0.30 -m file -a 'path=/opt/hj.link src=/opt/hj state=link'

给/etc/fstab创建一个软连接,这个文件是目标主机/opt/fstab.bak复制过来的文件,复制过来的文件/opt/fstab.bak在目标主机的/opt/下,创建一个文件fstab.link。用fstab.link作为fstab.bak的软连接。

远程删除

ansible 20.0.0.30 -m file -a 'path=/opt/fstab.link state=absent'

10.yum模块

远程主机上安装和卸载软件包

在目标主机上的操作都是后台运行,不影响其他用户的使用

1.查询远程主机httpd状态

2.开启

3.访问(this is httpd)

ansible 20.0.0.30 -m shell -a 'systemctl restart httpd'ansible 20.0.0.30 -m shell -a 'touch /var/www/html/index.html && echo "this is httpd" > /var/www/html/index.html'ansible 20.0.0.30 -m shell -a 'curl 20.0.0.30'

11.service/systemd模块

name,设定管理服务的名称

state=start|stopped|restartd 管理动作

enabled=true 表示是否设置开机自启,如果不加,默认就算开机不自动启动。

runlevel:配合enabled的,开机自启,可以设置运行级别。在命令行可以设置但是不生效,必须要在playbook当中使用。

安装nginx,设置为开机自启,设置访问页面

得先安装epel源

ansible 20.0.0.30 -a 'yum -y install epel-release'
安装epelansible 20.0.0.30 -m yum -a 'name=nginx'
安装nginxansible 20.0.0.30 -m shell -a 'touch /usr/share/nginx/html/index.html && echo "this is nginx" > /usr/share/nginx/html/index.html'
设置访问页面ansible 20.0.0.30 -m shell -a 'curl 20.0.0.30'
访问ansible 20.0.0.30 -m service -a 'enabled=true name=nginx state=restarted'
设置开机自启

12.script模块

运行本地脚本,然后把结果输出到目标主机

写一个shell脚本,内容:touch 123 echo "***" > 123。要求在所有主机都执行

编写脚本
vim test.sh
touch 123
echo "hello world" > /opt/123
wq
chmod 777 test.shansible all -m script -a '/opt/test.sh'ansible all -a 'cat /opt/123'

13.setup模块

获取所有节点的信息

ansible 20.0.0.30 -m setup

filter用来过滤

ansible all -m setup -a 'filter=*ipv4'

查看内存

ansible all -m setup -a 'filter=ansible_mem*'

查看内核

ansible all -m setup -a 'filter=ansible_proc*'

查看系统

ansible all -m setup -a 'filter=*os*'

查看硬盘

ansible all -m setup -a 'filter=*dev*'

介绍常用命令

ansible all -m setup -a 'filter=*ipv4'
ansible all -m setup -a 'filter=*processor'
ansible all -m setup -a 'filter=mem'
ansible all -m setup -a 'filter=os' #windows
ansible all -m setup -a 'filter=system'
ansible all -m setup -a 'filter=proc'

Ansible部署

管理端20.0.0.20ansible
被管理端120.0.0.30
被管理端220.0.0.50
yum -y install epel-release
#安装ansible必须安装epel源
yum -y install ansible
#安装ansible主程序
cd /etc/ansible
ansible.cfg
#ansible的配置文件。一般无需修改
hosts
#主机组。声明可以被控制的主机
roles
#公共角色目录vim /etc/ansible/hosts

ansible默认使用ssh连接,所以管理前要设置免密登录#配置密钥对验证ssh-keygen -t rsa    #一路回车,生成密钥文件​vim /etc/ssh/ssh_config      #修改ssh服务端和ssh客户端配置文件StrictHostKeyChecking no     #35行,取消注释,将ask修改为no,开启免交互​systemctl restart sshd       #重启sshd
ssh-keygen -t rsa
#创建密钥队
ansible 20.0.0.20 -m command -a 'date'
ansible 20.0.0.30 -m command -a 'date'
#先运行ansible的命令
sshpass -p '123' ssh-copy-id root@20.0.0.30
sshpass -p '123' ssh-copy-id root@20.0.0.50
#再将密钥队传给20和30
ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
tail -f /var/log/messages
#可以查看记录
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令

配置主机有两种方式:

1、 直接声明主机的IP地址

2、 声明主机名。需要提前在/etc/hosts/里做映射

主机清单

如何快速声明多个主机

添加192.168.233.61 192.168.233.62  192.168.233.63

主机清单管理组当中的变量名:
ansible_host   连接时的IPansible_port   声明对方的路连接端口,默认是ssh的22端口ansible_user  指定连接时,指定对方的用户名,不指定主机执行ansible的用户即为使用目标主机的用户名ansible_password  指定连接ssh时的密码(目标主机的用户密码)ansible_become 提升用户权限
ansible_become rootansible_become_password 指定切换用户

免密登录

所有用户都使用一个用户名和密码

组嵌套

案例

写一个编译安装nginxd的脚本,在所有主机都生效

首先在主机(控制端)编写脚本

#!/bin/bash
#安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#环境创建
useradd -s /sbin/nologin -M nginx #编译安装
cd /opt
tar  xf nginx-1.22.0.tar.gz
cd nginx-1.22.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install#添加nginx系统服务
echo "
[Unit] 
Description=nginx 
After=network.target 
[Service] 
Type=forking 
PIDFile=/usr/local/nginx/logs/nginx.pid 
ExecStart=/usr/local/nginx/sbin/nginx 
ExecReload=/bin/kill -s HUP $MAINPID 
ExecStop=/bin/kill -s QUIT $MAINPID 
PrivateTmp=true 
[Install] 
WantedBy=multi-user.target 
" > /lib/systemd/system/nginx.servicechmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
#判断nginx是否成功运行
if [ $? -eq 0 ]
thenecho "开启nginx服务成功"
elseecho "开启nginx服务失败"
fiwqAnsible all -m script -a ‘/opt/test.sh’
运行

脚本运行成功

以上就编译安装成功,接下来设置页面内容

Ansible 20.0.0.50 -m shell -a ‘echo “hello nginx” > /usr/local/nginx/html/index.html’

相关文章:

Ansible自动化运维以及模块使用

ansible的作用: 远程操作主机功能 自动化运维(playbook剧本基于yaml格式书写) ansible是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起 ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每…...

数据分析场景下,企业大模型选型的思路与建议

来源/作者:爱分析 随着大模型带来能力突破,让AI与数据分析相互结合,使分析结果更好支撑业务,促进企业内部数据价值释放,成为了当下企业用户尤为关注的话题。本次分享主要围绕数据分析场景下大模型底座的选型思路&#…...

Mongodb复制集架构

目录 复制集架构 复制集优点 复制集模式 复制集搭建 复制集常用命令 复制集增删节点 复制集选举 复制集同步 oplog分析 什么是oplog 查看oplog oplog大小 复制集架构 复制集优点 数据复制: 数据在Primary节点上进行写入,然后异步地复制到Secondary节点&a…...

云原生之深入解析Kubernetes集群发生网络异常时如何排查

一、Pod 网络异常 网络不可达,主要现象为 ping 不通,其可能原因为: 源端和目的端防火墙(iptables, selinux)限制; 网络路由配置不正确; 源端和目的端的系统负载过高,网络连接数满…...

error: C2039: “qt_metacast“: 不是 “***“ 的成员

报错信息: error C2039: "qt_metacast": 不是 "radartrack::Base_track_data" 的成员 最近在使用Qt开发,自定义的数据类在继承数据抽象类和QObject类时总是报“qt_metacast 不是不是 "radartrack::Base_track_data" 的成员…...

量子计算:开启IT领域的新时代

量子计算:开启IT领域的新时代 一、量子计算的基本原理与背景 量子计算作为一项前沿高级技术,正逐渐引起IT领域的广泛关注。传统计算机是通过二进制位(0和1)来储存和处理信息,而量子计算机则利用量子位或称为“量子比特…...

数据可视化---柱状图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...

第十七章 爬虫scrapy登录与中间件2

文章目录 数据盘区太快会报错,setting中配置延迟 连接提取器...

运维知识点-Kubernetes_K8s

Kubernetes RBAC配置不当攻击场景攻击过程 RBAC配置不当 Service Account本质是服务账号,是Pod连接K8s集群的凭证。 在默认情况下,系统会为创建的Pod提供一个默认的Service Account, 用户也可以自定义Service Account,与Service…...

某电子文档安全管理系统存在任意用户登录漏洞

漏洞简介 某电子文档安全管理系统存在任意用户登录漏洞,攻击者可以通过用户名获取对应的cookie,登录后台。 资产测绘 Hunter语法:web.icon“9fd216c3e694850445607451fe3b3568” 漏洞复现 获取Cookie POST /CDGServer3/LinkFilterServi…...

音视频参数介绍

一、视频参数概念 单个视频帧:可以简单地理解成为一张图片 单个视频帧主要的参数概念: 分辨率: 分辨率是指图像或显示器上像素的数量,通常用横向像素数乘以纵向像素数表示。例如,1920x1080 表示宽度为1920像素&…...

vue中使用minio上传文件

创建一个 文件getOssClient import { getOssSetting } from "/api/common"; import Vue from "vue"; import { getCookies, getLocal } from "/utils/auth"; // get token from cookie export async function getStsToken() {//从后台获取stsTo…...

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查(CRUD,create,retrieve,update,delete)数据库的核心模块。 1. 新增(Create) 实…...

搜维尔科技:关于“第九届元宇宙数字人设计大赛”线上+线下巡回宣讲本周高校行程通告!

为了让大家更全面地了解此次大赛,顺利地进行大赛的报名和参赛,组委会遴选了一批优秀讲师代表,组建了宣讲团,以线上线下的方式陆续开展巡回宣讲。宣讲兼顾不同学生群体的需求,结合在数字人设计制作的过程中常见的疑难点…...

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0:Google推出的全新AI模型,将改变生成式人工智能领域的游戏规则! 🎥 屿小夏 : 个人主页 🔥个人专栏 : IT杂谈 🌄 莫道桑榆晚,为霞尚满天! 文章目录 …...

excel打开并操作CAD(excel-vba实现)_另附:CAD打开excel

excelvba可实现调用cad应用程序,并通过excel内置api弹窗实现打开、另存CAD 文件(cad-vba弹窗功能较为麻烦),代码如下(在excel_vba环境下操作): Sub excel_vba打开另存并操作CAD文件() Dim cad …...

Prolist组件实现动态竖排展示

实现原理&#xff1a;主要是利用外层div属性display:"flex",overflowX: auto&#xff0c;配合内层prolist样式属性flex:"0 0 auto",overflowX:"auto",width:"350px",height:900&#xff0c;实现动态竖排展示 <div style{{display:…...

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…...

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1&#xff09;框架介绍与引入1.1.&#x1f680; 什么是 StreamPark1.2.&#x1f389; Features1.3.&#x1f3f3;‍&#x1f308; 组成部分1.4.引入 StreamPark 2&#xff09;安装部署2.1.环境要求2.2.Hado…...

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...