Ansible自动化工具

news2024/10/22 6:58:04

一、Ansible概述

1.1 什么是Ansible

Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无代理架构,它通过 SSH 连接到远程主机,不需要在目标服务器上安装任何软件。

除了 Ansible,常用的 IT 自动化和配置管理工具还有很多,如Chef、Puppet、SaltStack

1.2 Ansible 的特性

  • 批量管理与部署   Ansible 能够轻松管理数以千计的主机。管理员不再需要逐一登录每个主机执行操作,而只需在控制节点上执行命令,Ansible 会自动将这些命令应用于所有目标主机。这极大提高了运维效率,尤其在处理大规模基础设施时。

  • 模块化架构
    Ansible 采用基于模块的工作机制。Ansible 本身并不执行任务,而是通过调用各种模块来完成具体操作。例如:

    每个模块都是功能独立的,可以针对不同的任务进行调用,使得 Ansible 的功能非常强大和灵活。

    • copy 模块用于将文件从控制节点复制到远程主机。
    • service 模块用于管理服务的启动、停止和重启。
  • 无代理特性(Agentless)Ansible 的一大亮点是其无代理的架构。用户只需在控制节点上安装 Ansible,而不需要在被管理的每个主机上安装任何额外的服务或代理。Ansible 通过 SSH 连接到远程主机,执行命令并返回结果。这使得 Ansible 的部署和使用变得异常简单。

  • 幂等性(Idempotence)Ansible 的许多模块具有幂等性,这意味着多次执行同一操作不会改变系统的最终状态。例如,如果一个服务已经在运行,执行启动服务的命令不会产生任何副作用。这使得 Ansible 在自动化管理时更加安全可靠。

1.3 Ansible 的工作流程

  • 解析 Playbook:Ansible 首先解析 Playbook 文件,读取其中的 hosts、tasks、variables 等信息。
  • 选择目标主机:根据 Inventory 文件选择符合条件的目标主机。
  • 建立 SSH 连接:通过 SSH 与目标主机建立连接,使用提供的用户凭证(如密钥或密码)
  • 执行任务:Ansible 按照 Playbook 中的顺序执行任务,每个任务会在目标主机上执行相应的模块(如 apt、yum、copy 等)。
  • 处理结果:每个任务执行完后,Ansible 会收集返回的结果并进行处理,包括成功、失败或改变的状态。

1.4 Ansible 特点

  • 简单部署
    Ansible 的部署过程非常简单,只需在控制节点上安装 Ansible,远程主机无需做任何操作。

  • 基于 SSH 的管理
    默认情况下,Ansible 使用 SSH 协议连接和管理远程设备,这种方式安全可靠。

  • 集中化管理
    Ansible 提供主从架构,用户可以集中管理多个节点,降低了运维复杂性。

  • 功能强大与扩展性
    Ansible 的配置简单,同时功能强大,支持用户自定义模块和插件,能够满足各种复杂的自动化需求。

  • 通过 API 和自定义模块扩展
    用户可以通过 API 和 Python 自定义模块轻松扩展 Ansible 的功能,以适应特定的业务需求。

  • 使用 Playbooks
    Playbooks 允许用户定制复杂的配置和状态管理,支持更灵活的自动化方案。

  • 支持云计算和大数据环境
    Ansible 对云计算平台(如 AWS、Azure 等)和大数据框架(如 Hadoop、Spark 等)有很好的支持,能够有效管理云基础设施。

二、Ansible 

在进行 Ansible 的使用之前,我们需要在管理端安装 Ansible。假设我们的管理端 IP 为 192.168.10.23,被管理端 IP 分别为 192.168.10.14192.168.10.15

2.1 管理端安装 Ansible

首先,安装 EPEL(Extra Packages for Enterprise Linux)源,然后安装 Ansible:

# 安装 EPEL 源
yum install -y epel-release

# 安装 Ansible
yum install -y ansible

2.2 Ansible 目录结构

安装完成后,Ansible 的主要目录结构如下:

2.3  配置主机清单

/etc/ansible 目录中配置主机清单 hosts,定义需要管理的主机:

cd /etc/ansible
vim hosts

# 配置组名和被管理主机
[webservers]
192.168.10.14

[dbservers]
192.168.10.15

2.4 配置密钥对验证

为了实现免密登录,我们需要生成 SSH 密钥对并将公钥复制到被管理的主机上:

# 生成 SSH 密钥对
ssh-keygen -t rsa  # 一路回车

# 将公钥复制到被管理主机
sshpass -p 'your_password' ssh-copy-id root@192.168.10.14
sshpass -p 'your_password' ssh-copy-id root@192.168.10.15

三、Ansible 命令行模块

Ansible 的命令行格式如下:

ansible <组名> -m <模块> -a <参数列表>

使用 ansible-doc

可以使用 ansible-doc 命令列出所有已安装的模块:

ansible-doc -l  # 列出所有模块

3.1 command 模块

command 模块用于在远程主机执行命令,不支持管道和重定向等 shell 特性。

# 查看 command 模块的描述
ansible-doc -s command

# 在指定 IP 执行命令
ansible 192.168.10.14 -m command -a 'date'
ansible webservers -m command -a 'date'

常用参数:

  • chdir:在远程主机上运行命令前切换到指定目录。
  • creates:判断指定文件是否存在,如果存在,则不执行后续操作。
  • removes:判断指定文件是否存在,如果存在,则执行后续操作。
ansible all -m command -a "chdir=/home ls ./"

3.2 shell 模块

shell 模块用于在远程主机执行命令,支持管道等 shell 特性。

# 查看 shell 模块的描述
ansible-doc -s shell

# 使用 shell 模块执行命令
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}")'

3.3 cron 模块

cron 模块用于在远程主机定义任务计划。

# 查看 cron 模块的描述
ansible-doc -s cron

# 添加计划任务
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="jqg crontab"'

# 列出计划任务
ansible webservers -a 'crontab -l'

# 移除计划任务
ansible webservers -m cron -a 'name="jqg crontab" state=absent'

3.4 user模块 (用户管理)

常用参数:

  • name: 用户名,必选
  • state: 创建或删除账号 (present 创建,absent 删除)
  • system: 是否为系统账号 (yes|no)
  • uid: 用户ID
  • group: 用户基本组
  • shell: 默认使用的shell
  • move_home: 移动现有的家目录 (yes|no)
  • password: 用户密码(建议加密)
  • comment: 用户注释信息
  • remove: 删除账号时是否删除家目录 (yes|no)
ansible dbservers -m user -a 'name="test01"'   # 创建用户test01
ansible dbservers -m user -a 'name="test01" state=absent'   # 删除用户test01

3.5 group模块 (用户组管理)

常用参数:

  • name: 组名
  • gid: 组ID
  • system: 是否为系统组 (yes|no)
ansible dbservers -m group -a 'name=kgc gid=1111 system=yes'   # 创建kgc组
ansible dbservers -m user -a 'name=jqg uid=1111 system=yes group=kgc'   # 将jqg用户添加到kgc组

3.6 copy模块

文件复制

常用参数:

  • dest: 目标路径(绝对路径)
  • src: 源文件路径
  • mode: 文件权限
  • owner: 文件属主
  • group: 文件属组
  • content: 复制的内容(不能与src一起使用)
ansible dbservers -m copy -a 'src=/home/cs.txt dest=/home/cs.txt owner=root mode=640'
ansible dbservers -m copy -a 'content="helloworld" dest=/home/hello.txt'

3.7 file模块 (文件属性设置)

常用参数:

  • path: 文件路径
  • owner: 文件属主
  • group: 文件属组
  • mode: 文件权限
  • state: 文件状态 (present/absent/link)
ansible dbservers -m file -a 'owner=jqg group=kgc mode=644 path=/home/hello.txt'   # 修改文件权限
ansible dbservers -m file -a 'path=/home/hello.link src=/home/hello.txt state=link'   # 创建链接文件
ansible dbservers -m file -a "path=/home/abc.txt state=touch"   #创建文件
ansible dbservers -m file -a "path=/home/abc.txt state=absent"   #删除文件

3.8 hostname 模块

用于管理远程主机上的主机名

ansible dbservers -m hostname -a "name=host-jqg"   #设置主机名

3.9 ping模块

用于检测远程主机的连通性

ansible all -m ping    #测试连通性

3.10 yum模块

用于在远程主机上安装与卸载软件包

ansible webservers -m yum -a 'name=tree'   #安装软件包
ansible webservers -m yum -a 'name=tree state=absent'   #卸载软件包

3.11 service/systemd 模块

用于管理远程主机上的服务运行状态

  • name: 被管理的服务名称
  • state: 服务的状态,started(启动)、stopped(停止)、restarted(重启)
  • enabled: 是否设置为开机自启,yesno
  • runlevel: 如果设定了 enabled,则定义在哪些运行目标下自启动(例如:runlevel=5
ansible webservers -a 'systemctl status nginx'   #查看服务状态
ansible webservers -m service -a 'enabled=true name=nginx state=started'   #启动服务并设置开机自启

3.12 script 模块

用于在远程主机上执行本地脚本

使用步骤:

  • 创建名为 test.sh 的 shell 脚本
#!/bin/bash
echo "hello ansible from script" > /home/script.txt
  • 赋予脚本执行权限
chmod +x test.sh
  • 使用 ansible 命令运行脚本,针对 webservers 主机组。
ansible webservers -m script -a 'test.sh'
  • 检查远程主机上的输出文件
ansible webservers -a 'cat /home/script.txt'

3.13 setup 模块

用于收集远程主机的事实信息(系统详细信息)

使用步骤:

  • webservers 组的所有主机收集事实。
ansible webservers -m setup
  • 使用 filter 选项获取 dbservers 组中主机的 IPv4 地址
ansible dbservers -m setup -a 'filter=*ipv4'

四、Ansible Inventory 主机清单

在日常的运维管理中,Ansible 是一个非常强大的自动化运维工具,能简化大量的配置管理、部署和维护工作。而在 Ansible 中,Inventory(主机清单)是其核心组成部分之一,负责管理主机及其变量。本文将带你深入了解 Ansible 的 Inventory 文件如何使用,如何通过分组和变量来管理主机。

4.1 Ansible Inventory 的基本概念

Ansible 的 Inventory 是一个包含你要管理的主机和相关配置信息的文件。它允许你将主机分成不同的组,并为每个主机和组定义特定的属性和变量。

4.1.1 主机分组

在 Inventory 中,你可以将主机分组,使得同一组的主机可以共享相同的配置。这样就能对不同的主机集群进行精细化管理。

例如,以下配置定义了两个主机组:

[webservers]
192.168.192.70:2222       # 这里指定了连接端口
192.168.192.[5:7]0

[dbservers]
db-[a:f].host    # 匹配主机名为 db-a.host 到 db-f.host

4.1.2 使用主机列表

当你有多个相似的主机时,可以使用列表的方式来简化配置。

[webservers]
192.168.192.[5:7]0

上面的例子表示 192.168.10.12192.168.10.15 的四台主机都属于 webservers 组。

4.2 定义 Inventory 变量

在 Ansible 中,除了对主机进行分组外,你还可以为主机或者主机组定义变量,这些变量可以控制远程连接的各种参数(如 IP、端口、用户、密码等)。

4.2.1 主机变量

可以为每台主机指定连接的相关信息。

[webservers]
192.168.192.60 ansible_port=22 ansible_user=root ansible_password=123456

配置表示主机 192.168.192.60 使用 root 用户和 123456 密码通过 SSH 的 22 端口连接。

4.2.2 组变量

还可以为整个组中的所有主机定义统一的变量。

[webservers:vars]
ansible_user=root
ansible_password=123456

这样配置后,webservers 组中的所有主机都会使用相同的用户名和密码

4.2.3 全局变量

为所有主机定义一些通用的变量,可以使用 [all:vars],这会为所有主机默认使用 22 端口。

[all:vars]
ansible_port=22

4.3组嵌套

在实际应用中,可能需要通过子组来组织主机。比如,有 nginx 组和 apache 组,然后将这两个组放在一个大的组 webs 下面。

[nginx]
192.168.192.50
192.168.192.60
192.168.192.70

[apache]
192.168.192.[8:9]0

[webs:children]   # webs 组包含了 nginx 组和 apache 组的所有主机
nginx
apache

在这个配置中,webs 组是 nginxapache 两个组的父组,表示 webs 组下的所有主机即是这两个子组的所有主机。

总结

  • 主机分组:将主机分为不同的组,方便管理。
  • 主机与组变量:为不同的主机和主机组定义连接信息和其他配置变量。
  • 组嵌套:通过 children 关键词将多个子组放在一个父组下,实现更细致的分组管理。
  • 变量的应用:可以为所有主机定义全局变量,也可以为单个主机或主机组指定特定变量。

五、ansible playbook 剧本

5.1 什么是 ansible playnook

Playbook 是一个 YAML 格式的脚本,用来描述一系列的任务(Tasks),这些任务会按顺序在被管理的主机上执行。通过 Playbook,用户可以轻松地定义基础设施配置或应用程序部署的步骤。

5.2 playbook 基本组成部分

Playbook 主要由以下部分组成:

  • Tasks:任务,是通过调用 Ansible 模块来执行的操作。
  • Variables:变量,可以让 Playbook 更加灵活。
  • Templates:模板,用来动态生成配置文件等内容。
  • Handlers:处理器,在某些任务发生变更后触发。
  • Roles:角色,用来将任务、变量、模板等按角色进行模块化组织。

示例:创建一个playbook

---
- name: first play     # Play 的名称
  gather_facts: false  # 是否收集 facts,默认为 true
  hosts: webservers    # 指定目标主机组
  remote_user: root    # 在远程主机上执行任务的用户
  tasks:               # 任务列表
    - name: test connection    # 自定义任务名称
      ping:                    # 使用 ping 模块检查连接
    - name: disable selinux
      command: '/sbin/setenforce 0'   # 禁用 SELinux
      ignore_errors: True       # 忽略错误
    - name: disable firewalld
      service: name=firewalld state=stopped   # 停止 firewalld 服务
    - name: install httpd
      yum: name=httpd state=latest    # 安装 httpd
    - name: install configuration file for httpd
      copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf   # 复制配置文件
      notify: "restart httpd"    # 通知处理器重新启动 httpd
    - name: start httpd service
      service: enabled=true name=httpd state=started  # 启动 httpd 服务
  handlers:   # 处理器定义
    - name: restart httpd
      service: name=httpd state=restarted    # 重新启动 httpd

运行playbook

使用 ansible-playbook 命令运行 Playbook:

ansible-playbook test1.yaml

常用选项:

  • -k:交互输入 SSH 密码。
  • -K:交互输入 sudo 密码。
  • -u:指定远程执行的用户。
  • --syntax-check:检查 Playbook 语法是否正确。
  • --list-task:列出 Playbook 中的任务。
  • --list-hosts:列出 Playbook 的目标主机。
  • --start-at-task:从指定任务开始执行。

示例:下载httpd并启动

5.3 定义、引用变量

定义与引用变量

在 Playbook 中可以使用 vars 来定义变量,并在任务中引用它们。

在命令行定义变量

你可以通过命令行传递变量

可以通过 -e 传递一个简单的变量

需要将原先用户的uid替换掉,否则报错

5.4条件判断与循环

When 条件判断

通过 when 指令可以实现条件执行任务:

- name: shutdown host
  command: /sbin/shutdown -r now
  when: ansible_default_ipv4.address == "192.168.192.60"   # 判断主机 IP

循环 (Loop)

可以使用 with_itemsloop 来实现任务的循环执行:

tasks:
  - name: create directories
    file:
      path: "{{item}}"
      state: directory
    with_items:
      - /home/test1
      - /home/test2

或者更复杂的循环:

- name: add users
      user: name={{item.name}} state=present groups={{item.groups}}
      with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root

 5.5 Templates 模块

Jinja2 是基于 Python 的模板引擎,它允许通过引用变量来动态生成配置文件。在 Ansible 中,template 模块用于将 Jinja2 模板应用于 Playbook。以下是如何使用 Jinja2 模板自动化配置 Apache HTTP 服务器的示例。

①准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量

cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改

②修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

vim /etc/ansible/hosts       

[dbservers]
192.168.192.50 http_port=192.168.192.50 server_name=www.benet.com:80 root_dir=/var/www/html

③编写 playbook 

vim apache.yaml
---
- hosts: dbservers
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name= "{{package}}" state=latest
    - name: install configure file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
        - restart httpd
    - name: create root dir
      file: path=/var/www/html state=directory
    - name: start httpd server
      service: name= "{{service}}" enabled=true state=started
  handlers:
    - name: restart httpd
      service: name= "{{service}}" state=restarted

5.6 tags 标签

在 Ansible 中,可以为任务定义标签(tags),并通过命令行参数 --tags 来控制任务的执行范围。这对于只执行特定任务或跳过某些任务非常有用。

①编写带有 Tags 的 Playbook

创建一个带有 tags 的 Playbook 文件 daemon6.yaml

---
- hosts: dbservers
  remote_user: root
  tasks:
    - name: copy file
      copy: src=/opt/kgc.txt dest=/home/kgc.txt
      tags:
        - copy         # 仅在指定运行 'copy' 标签时执行此任务

    - name: touch test1 file
      file: path=/home/kgc2.txt state=touch
      tags:
        - always       # 无论运行哪一个标签,始终执行此任务  

    - name: touch test2 file
      file: path=/home/kgc3.txt state=touch
      tags:
        - touch

在这个 Playbook 中,tags 允许你控制任务的执行。only 标签的任务只有在命令行显式指定时才会执行,而 always 标签表示无论执行什么标签,这个任务都会被执行。

②执行带有 Tags 的 Playbook

使用 --tags 选项只执行带有 copy 标签的任务:

只触发了 “copy”和“always” 部分内容:

如果不指定tags,则都触发

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

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

相关文章

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

Rust语言编程环境的安装

简介 Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。 Rust语言的特点 系统级编程:Rust语言非常适合进行底层系统级编程,如操作系统、网络协议栈、设备驱动程序等。 内存安全:Rust使用所有权(ownership)系统来…

Scrapy | 爬取笑话网来认识继承自Spider的crawlspider爬虫类

crawlspider 1. 创建crawlspider爬虫2. 实战-爬取笑话网笑话 本篇内容旨在拓展视野和知识&#xff0c;了解crawlspider的使用即可&#xff0c;主要熟悉掌握spider类的使用 CrawlSpider 提供了一种更高级的方法来定义爬取规则&#xff0c;而无需编写大量的重复代码。它基于规则…

【功能安全】汽车功能安全个人认证证书

目录 1、证书 2、课程信息 &#x1f4d6; 推荐阅读 1、证书 汽车功能安全工程师去拿类似莱茵、SGS、南德颁发的证书&#xff0c;如下&#xff1a; 2、课程信息 一般上什么课程了&#xff0c;课程信息大概如下&#xff1a; 汽车功能安全工程师认证课 &#xff08;3天&#…

【Linux】进程的挂起状态

挂起状态的前提条件 当 内存资源严重不足 时&#xff0c;操作系统会考虑将部分进程换出到磁盘上的交换空间&#xff08;swap 分区&#xff09;。这通常发生在以下几种情况下&#xff1a; 内存不足&#xff1a; 当物理内存接近耗尽时&#xff0c;操作系统会选择将一部分暂时不需…

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言&#xff0c;树高的规律&#xff1a; 高度为h的平衡二叉树的含有的最少结点数&#xff08;所有非叶节点的平衡因子均为1&#xff09;&#xff1a; n01&#xff0c;n11&#xff0c;n22 含有的最多结点数&#xff1a; (高度为h的满二叉树含有的结点数) ②…

监控内容、监控指标、监控工具大科普

在现代信息技术领域&#xff0c;监控技术扮演着至关重要的角色。它帮助我们实时了解系统、网络、应用以及环境的状态&#xff0c;确保它们的安全、稳定和高效运行。以下是对监控内容、监控指标和监控工具的详细科普。 一、监控内容 监控内容是指监控系统所关注和记录的具体信…

C++面向对象编程学习

C面向对象编程学习 前言一、C面向对象编程二、知识点学习1. 定义一个类1.1 使用struct定义1.2 使用class定义1.3 struct和class的区别 2. 类的定义方式2.1 单文件定义&#xff08;Inline Definition&#xff09;2.2 分离定义&#xff08;Separate Definition&#xff09;2.3 头…

一文2500字从0到1实现压测自动化!

大家好&#xff0c;我是小码哥&#xff0c;最近工作有点忙&#xff0c;一直在实现压测自动化的功能&#xff0c;今天来分享一下实现思路 我所在的业务线现在项目比较少了&#xff0c;所以最近一个月我都没有做业务测试&#xff0c;需求开发完后RD直接走免测就上线&#xff0c;…

利用Spring Boot实现信息化教学平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理信息化在线教学平台的相关信息成为必然。开…

Ansible自动化运维管理工具

一、Ansible 1.1、自动化运维管理工具有哪些&#xff1f; 工具架构语言使用情况Ansible无clientpython 协议用ssh95%puppetC/Sruby 协议用http基本不用chefC/Sruby 协议用http基本不用saltstackC/Spython 协议用ssh5% 1.2、Ansible简介 Ansible是一个基于Py…

深度学习 简易环境安装(不含Anaconda)

在Windows上安装深度学习环境而不使用Anaconda&#xff0c;下面是一个基于pip的安装指南&#xff1a; 1. 安装Python 确保你已经安装了Python。可以从Python官网下载Python&#xff0c;并在安装时勾选“Add Python to PATH”选项。 注意&#xff0c;Python 不要安装最新版的…

期权懂|期权止损策略如何平衡风险与收益?

本期让我懂 你就懂的期权懂带大家来了解&#xff0c;期权止损策略如何平衡风险与收益&#xff1f;有兴趣的朋友可以看一下。期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 期权止损策略如何平衡风险与收益&#xff1f; 期权止损…

如何写一个视频编码器演示篇

先前写过《视频编码原理简介》&#xff0c;有朋友问光代码和文字不太真切&#xff0c;能否补充几张图片&#xff0c;今天我们演示一下&#xff1a; 这是第一帧画面&#xff1a;P1&#xff08;我们的参考帧&#xff09; 这是第二帧画面&#xff1a;P2&#xff08;需要编码的帧&…

计算机网络—静态路由

1.0 网络拓扑结构 星型拓扑结构是一个中心&#xff0c;多个分节点。它结构简单&#xff0c;连接方便&#xff0c;管理和维护都相对容易&#xff0c;而且扩展性强。网络延迟时间较小&#xff0c;传输误差低。中心无故障&#xff0c;一般网络没问题。中心故障&#xff0c;网络就出…

MIT-OC Electrochemical Energy Systems 1-2

一、等效电路模型 L2 电化学能量转换 1. 电化学能量转换与原电池 原电池可以将不同形式的能量&#xff08;化学能、太阳能、机械压力等&#xff09;转化为电能和热能。本文档讨论了一些原电池的示例及其等效电路模型。电压源&#xff1a;特性&#xff1a;电压源的特点是提供…

从网络请求到Excel:自动化数据抓取和保存的完整指南

背景介绍 在投资和财经领域&#xff0c;论坛一直是投资者们讨论和分享信息的重要平台&#xff0c;而东方财富股吧作为中国最大的财经论坛之一&#xff0c;聚集了大量投资者实时交流股票信息。对于投资者来说&#xff0c;自动化地采集这些发帖信息&#xff0c;并进行分析&#…

ionic Capacitor 生成 Android 应用

官方文档 https://ionic.nodejs.cn/developing/android/ https://capacitorjs.com/docs/getting-started 1、创建新的 Capacitor 应用程序 空目录下面 npm init capacitor/app2、install Capacitor npm install npm start在这里插入图片描述 3、生成dist目录 npm run buil…

ChatGPT 现已登陆 Windows 平台

今天&#xff0c;OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示&#xff0c;该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户&#xff0c;是一个早期版本&#xff0c;将在今年晚些时候推出"完整体验"。…

二、PyCharm基本设置

PyCharm基本设置 前言一、设置中文汉化二、设置代码字体颜色三、设置鼠标滚轮调整字体大小四、修改 PyCharm 运行内存4.1 方式一4.1 方式二 五、显示 PyCharm 运行时内存六、设置代码模版配置的参数有&#xff1a; 七、PyCharm设置背景图总结 前言 为了让我们的 PyCharm 更好用…