[DO374] Ansible 配置文件

news2025/1/11 9:16:33

[DO374] Ansible 配置文件

  • 1. 配置文件位置
  • 2. 配置文件
  • 3. Ansible 配置
  • 4. Ansible的Ad-hoc
  • 5. Ansible 模块
  • 6. playbook段落
  • 7. 任务执行后续
  • 8. Ansible 变量
    • 8.1 ansible 变量的定义
      • 8.1.1 主机变量
      • 8.1.2 主机组变量
    • 8.2 vars的循环
  • 9. Ansible Collection
  • 10. Ansible-galaxy 安装模块
    • 10.1 红帽和ansible的hub配置
    • 10.2 私有化hub配置
  • 11. 剧本执行顺序
  • 12. 判断
    • 12.1 远程文件的判断
    • 12.2 字符串大小写的判断
    • 12.3 判断ansible版本(控制端)
    • 12.4 子集
    • 12.5 父集(超集)
    • 12.6 判断字符串是否在集合内
    • 12.7 多任务用同一条件判断
      • 12.7.1 block
      • 12.7.2 rescue
      • 12.7.3 always
      • 12.7.4 剧本退出
      • 12.7.5 带有条件的退出
  • 13. 循环语句
    • 13.1 遍历列表
    • 13.2 遍历字典
    • 13.3 loop循环
  • 14. 任务委派
  • 15. 事实委派
  • 16. 缓存事实变量

1. 配置文件位置

  1. 默认位置(全局)/etc/ansible/ansible.cfg
  2. 当前工作目录./ansible.cfg
  3. 当前用户家目录下的~/.ansible.cfg
  4. 当前系统的ANSIBLE_CONFIG环境变量

优先级顺序: 4 > 2 > 3 > 1

2. 配置文件

配置块含义
[defaults]通用配置项,配置远程用户,连接密码,文件清单位置等
[inventory]主机清单段落,配置清单使用的插件等
[privilege_escalation]提权配置,是否提权,提权到哪个用户
[persistent_connection]RHEL6 连接插件,现在默认ssh连接
[ssh_connection]SSH连接配置项
[persistent_connection]持久连接配置项,连接超时时间,命令超时时间
[accelerate]加速项,默认端口:5099
[selinux]selinux的配置项,用来配置ansible支持的文件系统驱动及lxc容器配置
[colors]配置ansible的颜色,定义执行成功,错误输出的颜色
[diff]打印任务执行前后的差异

3. Ansible 配置

如果使用普通用户进行sudo,客户端需要

# 1. add user
useradd qiu
# 2. Set a passwd to the qiu user
echo redhat | passwd --stdin qiu
# 3. Grant sudo privileges to the qiu user
vim /etc/sudoers.d/qiu        
qiu ALL=(ALL) NOPASSWD:ALL

ansible.cfg 配置

[defaults]
inventory=./inventory		# 清单文件
remote_user = root			# 远程用户
ask_pass      = false		# 连接是用  密码/秘钥
[privilege_escalation]
become=True					# 是否提权
become_method=sudo			# 是否 sudo
become_user=root			# 提权到 root 用户
become_ask_pass=False		# 提权是否需要 密码
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s # ssh 连接加速

通过命令添加

# Set passwd file.
echo "Asimov" > .ansible_pass
chmod 600 .ansible_pass
# Test whether the password can be used for connection.
ansible all -m shell -a "whoami" -u root --vault-pass-file .ansible_pass
# Create qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "useradd qiu"
# Grant a password to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "echo 'root123' qiu"
# Grant sudo privileges to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "echo 'qiu ALL=(ALL)  NOPASSWD: ALL' > /etc/sudoers.d/qiu"
# Grant access key to the qiu user.
ansible all -m shell -u root --vault-pass-file .ansible_pass -a "mkdir /home/qiu/.ssh;echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGtUW3ismHyuCW4CDdTVOOOq6aySdtYenXFWWx7HJa4VTepkG00aaLId9ocra10hc+MB0GTJMCyabDv3i8NKdi6GDH/aOLVsp/Ewy8DEzZMBlJDCt4v2i4/wU4liw6KgEFkZs+5hnqU8d4QzldyGJ5onr+AGvFOKG68CS0BBl40Z1twf1HhCyx8k6nzD2ovlkxWRFZKPAFrtPCBVvQDkOfVFZF+lwzaSztgAjbFZ4A9jqQyUYx4kOJ5DtRef36ucdUdVQale0+8lICl7/gb142SPpYfhxe88/BJScLPRjvVNeu1TxRmoHtVazqnAoRxQYAn2MoI6AG+w6QuZf8f7aL LabGradingKey' >> /home/qiu/.ssh/authorized_keys;chmod 600 /home/qiu/.ssh/authorized_keys; chown -R qiu:qiu /home/qiu/.ssh"
# Try to use the qiu remote user to connect with ansible.
# Modify ansible.cfg and change remote_user to qiu user.
ansible all -m ping

4. Ansible的Ad-hoc

ad-hoc: ansible 临时命令,用ansible的模块来完成自动化任务,每次只能使用1个模块,来完成一个任务.因此ad-hoc称为ansible的临时命令

ad-hoc的语法:

格式: ansible 选择的主机 -m [模块] -a “模块的参数” (ansible参数)

# example
ansible all -m shell -a "whoami" -u root -k 

5. Ansible 模块

请添加图片描述

模块查询方式:

​ ansible-doc -l: 列出当前支持的所有模块

  1. 命令模块:
模块名作用
shell相当于在被控端本机上执行linux指令
command相当于在被控端本机上执行linux指令,但有4个符号除外 |,>,<,& 出现这4个符号时,command将无法执行该命令
script将主控端的shell复制到远程并执行.
raw不支持高阶参数(chdir,creates,removes)

chdir 执行命令前修改执行路径

creates 判断文件是否存在,如果存在就不执行后面的命令,文件不存在则执行后续命令

removes 和creates相反

当ansible省略模块时,默认使用command模块,取决于ansible.cfg配置文件中module_name = command参数.

  1. 文件模块

6. playbook段落

target段落:

​ hosts: 定义play在那些主机上运行

​ remote_user: 定义运行play的远程用户是哪个

​ gather_facts: 定义是否收集事实变量


注意: 在target中定义的参数可以是ansible.cfg中出现的,如果play中没有定义,则按ansible.cfg中的为准

vars段落: 用来定义变量,如果没有可以省略

支持在该段落中定义变量,也支持从文件中引入变量

直接定义变量:

​ 变量名1: 值1

​ 变量名2: 值2


tasks段落 用来定义任务,可以省略

在playbook中默认存在一个facts的任务.可以通过target中的gather_facts: false关闭

tasks:
    - name: 任务名称
      模块名称:
        具体参数: 参数的值

7. 任务执行后续

当需要执行完一个模块后有后续动作,可以用notify通知handlers.

当一个notify需要调用多个handler时,使用listen来关联监听.

---
- name: test notify
  hosts: servera.lab.example.com
  gather_facts: false
  tasks:
  - name: touch file
    ansible.builtin.file:
      path: /etc/foo.conf
      state: touch  
    notify: show debug info
  handlers:
  - name: handler 1
    listen: show file
    ansible.builtin.debug:
      msg: "in 1"
  - name: handler 2
    listen: show file
    ansible.builtin.debug:
      msg: "in 2"
  - name: handler 3
    listen: show file
    ansible.builtin.debug:
      msg: "in 3"

请添加图片描述

8. Ansible 变量

8.1 ansible 变量的定义

# inventory
servera ansible_port=2222 ansible_host=192.168.31.123 ansible_user=devlop
serverb ansible_port=4422 ansible_host=192.168.31.124 ansible_user=test
变量含义
ansible_portssh端口
ansible_host服务器ip
ansible_userssh用户
ansible_connectionssh连接类型:local,ssh,paramikko,默认ssh
ansible_ssh_passssh 密码
ansible_ssh_privite_key_filessh秘钥文件路径
ansible_ssh_executablessh命令路径

8.1.1 主机变量

对单个主机自定义变量

[test]
serverd.lab.example.com app=apache
servere.lab.example.com app=vsftpd

请添加图片描述

8.1.2 主机组变量

对组进行定例变量

[test]
serverd.lab.example.com app=apache
servere.lab.example.com app=vsftpd
[test:vars]
zabbix_agent=yes
prometheus_agent=no

请添加图片描述

主机的vars优先级高于主机组中的vars

8.2 vars的循环

---
- name: test notify
  hosts: servera.lab.example.com
  gather_facts: false
  vars:
    os_version:
      redhat:
        release: '7.9'
      ubuntu:
        release: '20.04'
      openeuler:
        release: '24.03LTS'
  tasks:
  - name: print versions
    debug:
      msg: "{{ item.value.release }}"
    loop: "{{ os_version | dict2items }}"

请添加图片描述

9. Ansible Collection

  1. 通过红帽自动化中心获取

https://console.redhat.com/ansible/automation-hub

  1. 通过ansible galaxy来获取

https://galaxy.ansible.com/ui/

  1. 通过yaml安装
# collection.yml
collections:
	- name: url

执行命令进行安装

ansible-galaxy collection install -r collection.yml -p 安装的路径和位置

10. Ansible-galaxy 安装模块

10.1 红帽和ansible的hub配置

[defaults]
ask_pass=False
forks=5
inventory=./inventory
remote_user = devops
collections_path=/root/collections
[privilege_escalation]
become_method=sudo
become_user=root
become_ask_pass=False
become=true
[galaxy]
server_list=redhat_hub
[galaxy_server.redhat_hub]
url=https://console.redhat.com/api/automation-hub/content/published/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NzQzYTkzMC03YmJiLTRkZGQtOTgzMS00ODcxNGRlZDc0YjUifQ.eyJpYXQiOjE3MzYzMTg4MzMsImp0aSI6ImI0YjJmZTAxLWM5NWMtNDZiNS05YWE4LWRlZGQyZmE1Y2RiNCIsImlzcyI6Imh0dHBzOi8vc3NvLnJlZGhhdC5jb20vYXV0aC9yZWFsbXMvcmVkaGF0LWV4dGVybmFsIiwiYXVkIjoiaHR0cHM6Ly9zc28ucmVkaGF0LmNvbS9hdXRoL3JlYWxtcy9yZWRoYXQtZXh0ZXJuYWwiLCJzdWIiOiJmOjUyOGQ3NmZmLWY3MDgtNDNlZC04Y2Q1LWZlMTZmNGZlMGNlNjoxMzkxNzA5OTMyMkAxMzkuY29tIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6ImNsb3VkLXNlcnZpY2VzIiwibm9uY2UiOiIwYzYyMDFkZS03MmE4LTRhNDEtOTE3My1mOGMwNzgxYjBmNzQiLCJzaWQiOiJiZTA0ZTk1Zi1iZjViLTRhZTgtOGJhMS05MjBjMzk5NjQxZGYiLCJzY29wZSI6Im9wZW5pZCBiYXNpYyBhcGkuaWFtLnNlcnZpY2VfYWNjb3VudHMgcm9sZXMgd2ViLW9yaWdpbnMgY2xpZW50X3R5cGUucHJlX2tjMjUgb2ZmbGluZV9hY2Nlc3MifQ.QdBlhVTGUj0Z0IsAkSRXM5yR2FfnY8k0Sczj5xVUjaKCiTJ-lCk08dUP2Omcndk6oQ0LYPXDzWL7v4f9423trg

请添加图片描述

测试安装ansible.posix

ansible-galaxy collection install ansible.posix

请添加图片描述

确认安装完成

[root@foundation0 ansible]# ls /root/collections/ansible_collections/ansible
posix

添加ansible仓库

[galaxy]
# 下行追加ansible_hub定义
server_list=redhat_hub,ansible_hub
[galaxy_server.redhat_hub]
url=https://console.redhat.com/api/automation-hub/content/published/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0NzQzYTkzMC03YmJiLTRkZGQtOTgzMS00ODcxNGRlZDc0YjUifQ.eyJpYXQiOjE3MzYzMTg4MzMsImp0aSI6ImI0YjJmZTAxLWM5NWMtNDZiNS05YWE4LWRlZGQyZmE1Y2RiNCIsImlzcyI6Imh0dHBzOi8vc3NvLnJlZGhhdC5jb20vYXV0aC9yZWFsbXMvcmVkaGF0LWV4dGVybmFsIiwiYXVkIjoiaHR0cHM6Ly9zc28ucmVkaGF0LmNvbS9hdXRoL3JlYWxtcy9yZWRoYXQtZXh0ZXJuYWwiLCJzdWIiOiJmOjUyOGQ3NmZmLWY3MDgtNDNlZC04Y2Q1LWZlMTZmNGZlMGNlNjoxMzkxNzA5OTMyMkAxMzkuY29tIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6ImNsb3VkLXNlcnZpY2VzIiwibm9uY2UiOiIwYzYyMDFkZS03MmE4LTRhNDEtOTE3My1mOGMwNzgxYjBmNzQiLCJzaWQiOiJiZTA0ZTk1Zi1iZjViLTRhZTgtOGJhMS05MjBjMzk5NjQxZGYiLCJzY29wZSI6Im9wZW5pZCBiYXNpYyBhcGkuaWFtLnNlcnZpY2VfYWNjb3VudHMgcm9sZXMgd2ViLW9yaWdpbnMgY2xpZW50X3R5cGUucHJlX2tjMjUgb2ZmbGluZV9hY2Nlc3MifQ.QdBlhVTGUj0Z0IsAkSRXM5yR2FfnY8k0Sczj5xVUjaKCiTJ-lCk08dUP2Omcndk6oQ0LYPXDzWL7v4f9423trg
# 添加以下2行
[galaxy_server.ansible_hub]
url=galaxy.ansible.com

安装一个vmware.vmware的插件

ansible-galaxy collection install vmware.vmware

安装结束后可以看到在/root/collections/ansible_collections/创建了vmware的子目录,我们下载的新插件就安装在这个位置

请添加图片描述

10.2 私有化hub配置

复制仓库配置

请添加图片描述

[galaxy]
server_list = community_repo

[galaxy_server.community_repo]
url=https://hub.lab.example.com/api/galaxy/content/community/
token=<put your token here>

生成token

请添加图片描述

修改后的ansible.cfg文件内容

[defaults]
collections_path=/home/student/collection/plugin
[galaxy]
server_list = community_repo
[galaxy_server.community_repo]
url=https://hub.lab.example.com/api/galaxy/content/community/
token=9e266577135f4a42c8612d4bb06a9dcbdb394cdc

创建galaxy collection的路径

mkdir -p /home/student/collection/plugin

安装一个community库的试一下

请添加图片描述

请添加图片描述

复制以下命令在命令行执行

请添加图片描述

请添加图片描述

11. 剧本执行顺序

  1. pre_tasks
  2. pre_tasks中的handler
  3. roles
  4. tasks
  5. roles中的handler
  6. post_tasks
  7. post_tasks中的handler
  8. pre roles和tasks post

12. 判断

12.1 远程文件的判断

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  tasks:
  - name: get file status
    file:
      name: /etc/hosts
      state: file
    register: get_file
  - name: get file
    debug:
      msg: "The file is exists"
    when: get_file.state == "file"

12.2 字符串大小写的判断

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  vars:
    uppercase: REDHAT
    lowercase: redhat
  tasks:
  - name: Uppercase output
    debug:
      msg: "It's Uppercase!"
    when: uppercase is upper
  - name: Lowercase output
    debug:
      msg: "It's Lowercase!"
    when: lowercase is lower

12.3 判断ansible版本(控制端)

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  tasks:
  - name: Operating Version
    debug:
      msg: "The playbook can run."
    when: ansible_version.full is version("2.8","gt")

12.4 子集

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  vars:
    os_type:
      - rhel
      - fedora
      - centos
      - ubuntu
      - openeuler
    redhat:
      - rhel
      - fedora
      - centos
  tasks:
  - name: Subset
    debug:
      msg: "It's subset"
    when: redhat is subset(os_type)

请添加图片描述

12.5 父集(超集)

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  vars:
    os_type:
      - rhel
      - fedora
      - centos
      - ubuntu
      - openeuler
    redhat:
      - rhel
      - fedora
      - centos

  tasks:
  - name: SuperSet
    debug:
      msg: "It's superset"
    when: os_type is superset(redhat)

请添加图片描述

12.6 判断字符串是否在集合内

---
- name: Is the file in servera
  hosts: servera.lab.example.com
  gather_facts: false
  vars:
    os_type:
      - rhel
      - fedora
      - centos
      - ubuntu
      - openeuler
    redhat:
      - rhel
      - fedora
      - centos
    centos: centos
    
  tasks:
  - name: SuperSet
    debug:
      msg: "It's in superset"
    when: centos in redhat

请添加图片描述

12.7 多任务用同一条件判断

12.7.1 block

block: 将多个任务包含在一个区块内,进行判断.

---
- name: block message test
  hosts: all
  gather_facts: true
  tasks:
    - name: in block
      block:
        - name: debug1
          debug:
            msg: "msg 1"
        - name: debug2
          debug:
            msg: "msg 2"
        - name: debug3
          debug:
            msg: "msg 3"
        - name: debug4
          debug:
            msg: "msg 4"
        - name: display hostname
          debug:
            var: ansible_hostname
      when: ansible_hostname == "servera"

这样就不需要在每个模块下面都加一个重复的

when: ansible_hostname == "servera"

请添加图片描述

12.7.2 rescue

rescue是用来处理block失败的后续手段.

---
- name: block message test
  hosts: all
  gather_facts: true
  tasks:
  - name: in block
    block:
    - name: get file
      file:
        name: /opt/rh374.txt
        state: file
    rescue:
    - name: touch file
      file:
        name: /opt/rh374.txt
        state: touch

当block内容执行错误后,rescue的修复任务被触发.如果block执行正常,那么rescue内容不会被执行.

请添加图片描述

当第二次再次执行,修复任务不在被执行

请添加图片描述

12.7.3 always

无论如何这个命令都会被执行

---
- name: block message test
  hosts: all
  gather_facts: true
  tasks:
  - name: in block
    block:
    - name: get file
      file:
        name: /opt/rh374.txt
        state: file
    rescue:
    - name: touch file
      file:
        name: /opt/rh374.txt
        state: touch
    always:
    - name: show the filename rh374.txt
      file:
        name: /opt/rh374.txt
        state: file

请添加图片描述

12.7.4 剧本退出

---
- name: block message test
  hosts: servera.lab.example.com
  gather_facts: true
  tasks:
  - name: get file
    file:
      name: /etc/hosts
      state: file
  - name: exit playbook
    fail:
      msg: "exit playbook"
  - name: output message
    debug:
      msg: "I am running"

当执行到fail段落时候就直接退出了,后续任务不会再被执行

请添加图片描述

判断ansible版本是否高于2.9,如果太低那么就不执行

---
- name: block message test
  hosts: servera.lab.example.com
  gather_facts: true
  tasks:
  - name: output message
    debug:
      msg: "{{ ansible_version.full }}"
  - name: optput ansible version
    fail:
      msg: "The ansible version is lower than 2.9,you must update the ansible version."
    when: ansible_version.full is version("2.9","lt")
  - name: install applications
    debug:
      msg: "install apps....."

请添加图片描述

12.7.5 带有条件的退出

当条件触发,则退出

---
- name: block message test
  hosts: servera.lab.example.com
  gather_facts: true
  tasks:
  - name: Determine the ansible version,then install applications
    debug:
      msg: "Install apps....."
    failed_when: ansible_version.full is version("2.9","lt")

改为failed_when之后可以将2-3个task合并成一个

请添加图片描述

13. 循环语句

13.1 遍历列表

在ansible中有很多循环场景需要批量安装或者授权.

---
- name: loop 
  hosts: servera.lab.example.com
  gather_facts: true
  vars:
    user_list:
    - tom
    - bob
    - andy
    - tony
    - ted
  tasks:
  - name: Add users
    user:
      name: "{{ item }}"
      state: present
    with_items: "{{ user_list }}"

请添加图片描述

13.2 遍历字典

---
- name: loop 
  hosts: servera.lab.example.com
  gather_facts: true
  vars:
    user_list:
      ituser1:
        name: tom
        uid: 3000
        home: /home/tom
      ituser2:
        name: jarry
        uid: 3001
        home: /home/jarry
  tasks:
  - name: Add users
    #debug:
    #  msg:  "{{ item.value.name }} {{ item.value.uid }} {{ item.value.home }}"
      #msg:  "{{ item.value.name }}"
    user:
      name: "{{ item.value.name }}"
      uid: "{{ item.value.uid }}"
      comment: "{{ item.value.name }}"
      home: "{{ item.value.home }}"
    with_dict: "{{ user_list }}"

请添加图片描述

到servera上确认两个用户正常创建

请添加图片描述

13.3 loop循环

loop本身是循环列表,可以通过loop dict2items来循环字典.将字典转换成列表.

---
- name: loop 
  hosts: servera.lab.example.com
  gather_facts: true
  vars:
    user_list:
      ituser1:
        name: tom
        uid: 3000
        home: /home/tom
      ituser2:
        name: jarry
        uid: 3001
        home: /home/jarry
  tasks:
  - name: Add users
    debug:
      msg:  "{{ item.value.name }} {{ item.value.uid }} {{ item.value.home }}"
    loop: "{{ user_list |dict2items }}"

请添加图片描述

14. 任务委派

delegate_to 可以将任务交给其他服务器执行,此服务器甚至可以不在inventory中

---
- name: delegate to pluging
  hosts:  servera,serverb
  gather_facts: true
  tasks:
  - name: Delegate the playbook to serverc.
    block:
    - name: Install Apache
      yum:
        name: httpd
        state: present
    - name: Make sure a service unit is running
      ansible.builtin.systemd:
        state: started
        name: httpd
        enabled: yes
    - name: Make sure a service unit is stopping
      ansible.builtin.systemd:
        state: stopped
        name: firewalld
        enabled: yes
    - name: Create the index file
      copy:
        dest: /var/www/html/index.html
        content: "In serverc"
    delegate_to: serverc 
  - name: Download the file
    ansible.builtin.get_url:
      url: http://serverc/index.html
      dest: /root/aaa.html

将整个block中内容由servera和serverb调度给serverc,在serverc完成了调度后,servera和serverb再从serverc上获取到该文件

请添加图片描述

15. 事实委派

主要作用就是在服务器之间的参数传递

一般delegate_facts和delegate_to 会同时出现

---
- name: Delegate facts
 hosts: servera,serverb
 gather_facts: no
 tasks:
 - name: get servera facts
   setup:
   delegate_facts: true
   delegate_to: serverb
 - name: set ip info
   copy:
     dest: /opt/ipaddress.txt
     content: "{{ hostvars['serverb'].ansible_eth0.ipv4.address }}"

请添加图片描述

16. 缓存事实变量

缓存事实变量目的: 为了加速playbook的执行加速,不必每次运行playbook都要进行实时变量的收集.

常见有3种缓存方式:

  1. jsonfile
  2. memcache
  3. redis

开启缓存方式:

在ansible.cfg中[defaults]段落中gathering= 进行设置

参数含义
smart智能收集,如果本地有缓存则使用缓存,如果本地没有缓存则收集事实变量并缓存.
implicit一直收集事实变量(默认)
explict从来不收集,除非在playbook中指定gather_facts=true

smart开启后需要指定以下参数:

参数含义
fact_caching=jsonfile/memcached/redis三选一以哪种格式缓存
fact_cacheing_connection./facts_cache/jsonfile需要指定事实变量缓存的位置
fact_caching_timeout86400 (一天)当缓存失效后,重新开始缓存

memcache配置参数:

参数含义
fact_cachingmemcached使用memcache来做缓存
fact_caching_connection127.0.0.1:11211memcache的地址

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

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

相关文章

[程序设计]—代理模式

[程序设计]—代理模式&#x1f473; 本文章记录学习于——52.面向切面&#xff1a;AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事&#xff0c;在学习Spring的源码&#xff1a; 后面慢慢更新源码系列blog&#xff0c;希望多多关注&#x1f64f;&#x1f64f; 目前已经总结的b…

OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)

前篇博客有对常用LSA的总结 2类LSA&#xff08;Network-LSA&#xff09; DR产生泛洪范围为本区域 作用:  描述MA网络拓扑信息和网络信息&#xff0c;拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…

景芯SOC设计实战

终身辅导、一对一辅导&#xff0c;手把手教您完成SoC全流程设计&#xff0c;从入门到进阶&#xff0c;带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程&#xff01;直播视频不定期升级&#xff01;让您快速超越同龄人&#xff01; 景芯团队主打文档服务器实战…

多云架构,JuiceFS 如何实现一致性与低延迟的数据分发

随着大模型的普及&#xff0c;GPU 算力成为稀缺资源&#xff0c;单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求。同时&#xff0c;跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务。多云架构正逐渐成为一种趋势&#xff0c;然而该架构下的数…

如何获取文件的MIME类型

文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…

【Uniapp-Vue3】computed计算属性用法及方法对比

如果我们想要将两个响应式变量进行某种运算&#xff0c;就可以使用computed计算属性。 比如下面这个例子中&#xff0c;输入名和姓合成全名&#xff0c;可以用直接显示的方法&#xff1a; 我们也可以使用computed属性&#xff1a; import {computed} from "vue"; le…

C#实现凸壳算法

凸壳计算代码: public static PointD[] calcConvexHull(PointD[] points) {// 按 x 坐标对点进行排序Array.Sort(points, (p1, p2) => p1.X.CompareTo(p2.X));// 创建下凸壳var lowerHull = new List<PointD>();foreach (var point in points){while (lowerHull.Co…

设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析

状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为&#xff0c;使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类&#xff0c;通过状态对象的行为改变来避免…

SAP SD学习笔记27 - 贩卖契约(框架协议)2 - 基本契约 - 金额契约(价值合同)

上一章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约-CSDN博客 本章继续讲SAP中的内容&#xff1a; - 基本契约 - 金额契约…

mysql之基本select语句 运算符 排序分页

1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…

Linux中SSH服务(二)

一、基于公私钥的认证&#xff08;免密登录&#xff09; 1、Windows免密登录Linux Windows推荐安装Cygwin软件&#xff1a;Cygwin 1.1Windows上面生成公私钥 之前已经生成过了&#xff0c;所以显示公私钥已存在 lovezywLAPTOP-AABHB5ED ~ $ ssh-keygen Generating public/pr…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

NS2202X 系列 40V 输入 OVP 保护 IC

1 特性  最大输入电压&#xff1a; 40V  内部预设 2.1A 负载过流 OCP 保护  外置过流保护阈值可调节引脚&#xff0c;可悬空  外置 EN 使能控制引脚  内部预设 6V 输入过压 OVP 保护  输入 OVP 保护响应时间 20ns  内置 150 ℃过温…

Web前端基础知识(七)

要在JS中获取元素节点&#xff0c;需要使用DOM API提供的方法。 innerHTML&#xff1a;不仅会返回一个纯文本&#xff0c;还可以解析一下这个文本中的语意。 innerText: 忽略HTML标记。 举例&#xff1a; <body> <div id"box1">这是一个ID选择器标签…

[Transformer] The Structure of GPT, Generative Pretrained Transformer

The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work

欧拉公式和傅里叶变换

注&#xff1a;英文引文机翻&#xff0c;未校。 中文引文未整理去重&#xff0c;如有异常&#xff0c;请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos ⁡ x i sin ⁡ x e^{ix} \cos{x} i …

【python基础——异常BUG】

什么是异常(BUG) 检测到错误,py编译器无法继续执行,反而出现错误提示 如果遇到错误能继续执行,那么就捕获(try) 1.得到异常:try的执行,try内只可以捕获一个异常 2.预案执行:except后面的语句 3.传入异常:except … as uestcprint(uestc) 4.没有异常:else… 5.鉴定完毕,收尾的语…

Python 模块 Uvicorn 实战指南

文章目录 1. 介绍和安装1.1 介绍1.2 安装 2. 创建基础应用2.1 简单的 HTTP 应用2.2 添加日志 3. 实现高级功能3.1 支持 WebSocket3.2 优化运行性能 4. Nginx 配置反向代理4.1 安装与配置 Nginx4.2 启用 SSL 支持4.3 性能优化建议 5. 常见问题与解决方案5.1 高并发问题5.2 WebSo…

音频数据增强:提升音频信号质量的多种技术

在音频处理和机器学习领域&#xff0c;音频数据增强是一种常用的技术&#xff0c;旨在通过对原始音频信号进行各种变换和处理&#xff0c;生成更多样化的训练数据。   这不仅可以提高模型的鲁棒性&#xff0c;还能改善其在真实世界应用中的表现。本文将介绍几种常用的音频数据…

uniapp vue2版本如何设置i18n

如何设置i18n在该软件设置过语言的情况下优先选择所设置语言&#xff0c;在没有设置的情况下&#xff0c;获取本系统默认语言就&#xff0c;将系统默认语言设置为当前选择语言。 1、下载依赖&#xff1a; npm install vue-i18n --save 2、创建相关文件&#xff08;在最外层&…