Ansible基础五——条件语句、循环语句、handlers、任务失败处理

文章目录

  • 一、 循环语句
    • 1.1 单量循环
    • 1.2 多量循环
    • 1.3 老版本用法
    • 1.4 loop+register
  • 二、条件判断
    • 2.1 根据变量状态判断
    • 2.2 根据变量是否存在判断
    • 2.3 根据事实判断
    • 2.4 多条件判断
      • 2.4.1 and用法
      • 2.4.2 or用法
    • 2.5 循环判断
    • 2.6 根据上个任务结果判断
  • 三、handlers处理程序
  • 四、任务失败处理方法
    • 4.1 忽略失败任务
    • 4.2 强制执行失败任务
    • 4.3 自定义报错显示信息
    • 4.4 自定义“changed”出现时机
    • 4.5 Ansible块和错误处理

一、 循环语句

  • 可以使用item循环变量+loop模块组合使用,实现普通循环。
  • 常用于一键操作,比如一键安装所有组件服务。

1.1 单量循环

  • 只对一个变量进行循环

1.一键停止受控机上的两个服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  hosts: 192.168.130.161
  tasks:
    - name:  停止服务
      service:
        name: "{{ item }}"     ##引用循环变量。
        state: stopped
      loop:              ##使用loop模块,要操作的对象列表。
        - postfix
        - crond 

在这里插入图片描述
2.推荐写法,定义变量,一键启动受控机上的两个服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  vars:
    service_name:         ##定义变量,填写操作对象列表。
      - crond
      - postfix
  hosts: 192.168.130.161
  tasks:
    - name:  停止服务
      service:
        name: "{{ item }}"
        state: started
      loop: "{{ service_name }}"    ##模块直接引用变量。

在这里插入图片描述
3.使用变量文件定义,停止受控机上的两个服务。
在这里插入图片描述
在这里插入图片描述

1.2 多量循环

  • 对多个变量进行循环。

1.在受控机上创建两个用户,baimu1和baimu2,属组分别是root、qingjun。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  hosts: 192.168.130.161
  tasks:
    - name:  停止服务
      user:
        name: "{{ item.name }}"     ##循环变量。
        group: "{{ item.group  }}"
        state: present
      loop:           
        - name: baimu1
          group: root
        - name: baimu2
          group: qingjun

在这里插入图片描述

1.3 老版本用法

  • 之前版本的循环是通过以下字段来实现的。
循环关键字描述
with_items行为与简单列表的loop关键字相同,例如字符串列表或散列/字典列表。但与loop不同的是,如果为with_items提供了列表的列表,它们将被扁平化为单级列表。循环变量item保存每次迭代过程中使用的列表项。
with_file此关键字需要控制节点文件名列表。循环变量item在每次迭代过程中保存文件列表中相应文件的内容。
with_sequence此关键字不需要列表,而是需要参数来根据数字序列生成值列表。循环变量item在每次迭代过程中保存生成的序列中的一个生成项的值。

1.列出受控机的/opt目录下文件内容。
在这里插入图片描述
2.主控机编写剧本,验证查看。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  hosts: 192.168.130.161
  vars:
    qingjun:                ##定义变量qingjun。
      - /opt/baimu.txt
      - /opt/baimu1.txt
      - /opt/baimu2.txt
  tasks:
    - name:  获取文件内容
      shell: |
        cat "{{ item  }}"    ##循环变量。
      with_items: "{{ qingjun  }}"    ##使用with_items循环模块,应用变量qingjun,作用与loop模块相似。
      register: jis          ##将获取的结果注册到变量jis里去。
    - debug: var=jis    ##将jis变量内容打印出来。

在这里插入图片描述

1.4 loop+register

  • 配合打印循环。

1.打印出“zhangsan喜欢吃牛排”、“lisi喜欢吃牛排”的的信息。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  hosts: 192.168.130.161
  tasks:
    - name:  获取文件内容
      shell: |
        echo  "{{ item  }}" 特别喜欢吃牛排!      ##循环变量,依次跟局loop循环模块列表来执行。
      loop:
        - zhangsan
        - lisi
      register: qingjun      ##将获取的结果注册到循环变量里去。
    - name: Print  
      debug: 
        var: qingjun         ##打印输出。

在这里插入图片描述
2.从打印的结果再取值。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 一键操作
  hosts: 192.168.130.161
  tasks:
    - name:  获取文件内容
      shell: |
        echo  "{{ item  }}" 特别喜欢吃牛排!
      loop:
        - zhangsan
        - lisi
      register: qingjun
    - name: Print  
      debug: 
        msg: |
          "结果是:{{ item.start  }}"     ##取results里面的start的值,再进行打印。
      loop: "{{ qingjun['results'] }}"     ##从打印的整体结果里卖弄再取results部分里面的值。
    ##loop: "{{ qingjun.results }}"  ##第二种写法。

在这里插入图片描述
在这里插入图片描述

二、条件判断

  • 使用when语句来进行条件判断,若条件满足,则运行任务;若条件不满足,则跳过任务。
  • when语句放在任务名称和模块(及模块参数)的后面。
标识符示例
等于(值为字符串)ansible_machine == “x86_64”
等于(值为数字)max_memory == 512
小于min_memory < 128
大于min_memory > 256
小于等于min_memory <= 256
大于等于min_memory >= 512
不等于min_memory != 512
变量存在min_memory is defined
变量不存在min_memory is not defined
布尔变量是True。1、True或yes的求值为Truememory_available
布尔变量是False。0、False或no的求值为Falsenot memory_available
第一个变量的值存在,作为第二个变量的列表中的值ansible_distribution in supported_distros

2.1 根据变量状态判断

1.根据某个变量的取值状态判断是否执行某个任务。这里根据变量service_status是否等于true来判断是否要安装httpd服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_status: true    ##定义一个变量。
  tasks:
    - name: 判断apache是否安装
      yum:
        name: httpd
        state: present
      when: service_status      ##判断这个变量,条件语句里不能存在{{ }}引用符号。        

在这里插入图片描述

2.2 根据变量是否存在判断

1.根据上下文是否定义某个变量来判断是否执行某个任务。这里根据是否定义了变量service_name来判断是否要安装httpd服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  tasks:
    - name: 判断apache是否安装
      yum:
        name: "{{ service_name }}"    ##虽然引用变量,但此变量未被定义。
        state: absent
      when: service_name is defined

在这里插入图片描述

2.变量service_name为空,则不执行任务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name: " "          ##定义变量,但值为空。
  tasks:
    - name: 判断apache是否安装
      yum:
        name: "{{ service_name }}"    ##引用变量。
        state: absent
      when: service_name is defined        ##判断变量是否为空,为空则不执行任务。        

在这里插入图片描述
3.变量存在,执行任务,卸载httpd。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - httpd
  tasks:
    - name: 判断apache是否安装
      yum:
        name: "{{ service_name }}"
        state: absent
      when: service_name is defined

在这里插入图片描述

2.3 根据事实判断

  • 根据取出的事实来判断是否在对受控机执行任务。

1.先取受控机的事实相关参数,比如这里我就根据系统版本来判断。

[root@localhost ansible]# ansible all -m setup -i inventory.ini |less

在这里插入图片描述
2.当系统版本等于7.5时,才执行条件循环语句,依次停止变量列表中的服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - firewalld
  tasks:
    - name: 判断apache是否安装
      service:
        name: "{{ item }}"
        state: started
      loop: "{{ service_name  }}"
      when: ansible_facts['distribution_version'] == "7.5"

在这里插入图片描述

2.4 多条件判断

  • 使用and表示所有条件满足时,才执行任务。
  • or表示满足任意一个条件时,就可执行任务。

2.4.1 and用法

1.当系统版本为7.5,且python版本大于2.7时才会执行任务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - firewalld
  tasks:
    - name: 判断apache是否安装
      service:
        name: "{{ item }}"
        state: stopped
      loop: "{{ service_name  }}"
      when: ansible_facts['distribution_version'] == "7.5" and ansible_facts['python_version'] > 2.7

在这里插入图片描述
2.也可以多行写法。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - firewalld
  tasks:
    - name: 判断apache是否安装
      service:
        name: "{{ item }}"
        state: started
      loop: "{{ service_name  }}"
      when: 
        - ansible_facts['distribution_version'] == "7.5"
        - ansible_facts['python_version'] > 2.7

在这里插入图片描述

2.4.2 or用法

1.当系统版本为7.5,或python版本大于3时才会执行任务。我这里只满足了第一个条件,所以可以执行任务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - firewalld
  tasks:
    - name: 判断apache是否安装
      service:
        name: "{{ item }}"
        state: started
      loop: "{{ service_name  }}"
      when: ansible_facts['distribution_version'] == "7.5" or ansible_facts['python_version'] > 3

在这里插入图片描述
2.也可以多行写法。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  vars:
    service_name:
      - firewalld
  tasks:
    - name: 判断apache是否安装
      service:
        name: "{{ item }}"
        state: stopped
      loop: "{{ service_name  }}"
      when: 
        ansible_facts['distribution_version'] == "7.5"
        or
        ansible_facts['python_version'] > 3

在这里插入图片描述

2.5 循环判断

  • 结合loop模块实现循环判断。

1.循环事实里的条件,条件满足执行任务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  tasks:
    - name: 判断apache是否安装
      yum:
        name: httpd
        state: present
      loop: "{{ ansible_facts['mounts'] }}"  ##取事实里的mounts内的内容,其下面有多个挂载点,根据when条件来判断是否执行任务。
      when: 
        - item.mount == "/"           ##ansible_facts['mounts']['mount'] 的值是否为“/”。
        - item.size_available > 700    ##ansible_facts['mounts'][’size_avaliable‘]的值是否大于700.

在这里插入图片描述

2.6 根据上个任务结果判断

  • 根据上个任务结果来判断是否要执行后面的任务。
  • 比如,第一个任务是安装服务,若是安装成功则执行第二步启动服务;若是安装失败,就不需要继续执行任务了。

1.rc是任务执行后输出的一个值,当rc=0时,代表任务执行成功。
在这里插入图片描述
2.当第一步安装httpd服务成功时,会输出rc=0,之后才会执行第二步。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  tasks:
    - name: 判断服务是否安装
      yum:
        name: httpd
        state: present
      ignore_errors: yes   ##任务执行失败直接跳过,可以继续执行后面任务。
      register: qingjun     ##获取任务输出的结果,讲结果注册到变量qingjun里去。

    - name: 启动服务
      service:
        name: httpd
        state: started
      when: 
        - qingjun.rc == 0   ##变量qingjun里的内容有个rc值,rc=0时才会执行第二步。

在这里插入图片描述

三、handlers处理程序

基本了解:

  • handlers和tasks功能一样,也是用于处理任务的,只是它常用于更改服务配置文件后需要重启服务这种场景常用。
  • handlers和tasks是同级别,需要在tasks任务里定义notify语句,当notify语句所在的任务结果显示为changed时,才会触发handlers任务。

注意事项:

  1. 当tasks中有多个任务定义notify语句时,触发任务会按照handlers任务里的顺序来执行。
  2. 若tasks中定义多个notify语句具备相同的名称时,最终只会触发一个handlers任务。
  3. 即使有多个任务通知处理程序,该处理程序依然仅运行一次。如果没有任务通知处理程序,它就不会运行。

1.主控机的playbook目录下有个专门存放受控机配置文件的目录,此时配置文件http.conf是原文件,监听端口未被修改。
在这里插入图片描述
2.编写playbook,当notify所在的任务发生了改变就会触发handlers任务,从而重启服务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  tasks:
    - name: 判断服务是否安装
      yum:
        name: httpd
        state: present
      ignore_errors: yes

    - name: 更改服务配置文件
      template:
        src: ./file/httpd.conf               ##将主控机上的文件传到受控机上,若文件内容发生改变则触发任务。
        dest: /etc/httpd/conf/httpd.conf
      notify:
       - restart httpd   ##需要与handlers名称一致。

    - name: 启动服务
      service:
        name: httpd
        state: started
  handlers:
    - name: restart httpd     ##需与notify名称一致。
      service:
        name: httpd
        state: restarted

3.执行playbook,此时主控机上的http.conf文件内容未被修改,传到受控机上也不会出现覆盖动作,所以notify是直接返回的ok,此时不触发handlers任务。
在这里插入图片描述
4.访问受控机安装的httpd服务,默认80端口。
在这里插入图片描述

5.此时修改主控机上的http.conf文件内容,将监听端口改成88,执行playbook会触发handlers任务,因为两边文件内容不一样,传过去会覆盖受控机上的原文件。
在这里插入图片描述
在这里插入图片描述
6.再次访问受控机安装的httpd服务,需要88端口。
在这里插入图片描述

四、任务失败处理方法

4.1 忽略失败任务

  • 添加参数ignore_errors: yes,可以让playbook在任务失败时继续执行。

1.安装一个不存在的任务会失败,添加ignore_errors会忽略继续执行后面任务。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  tasks:
    - name: 判断服务是否安装
      yum:
        name: httpds
        state: present
      ignore_errors: yes

    - name: 更改服务配置文件
      template:
        src: ./file/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify:
       - restart httpd

    - name: 启动服务
      service:
        name: httpd
        state: started
  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

在这里插入图片描述

4.2 强制执行失败任务

  • 添加参数force_handlers: yes,针对性的适用handlers处理程序的场景。
  • 正常情况下,当某一个任务执行失败时就会停止其他程序处理;当使用此参数时,即时前面有任务执行失败,后面的handlers也会在notify函数所在的任务发生改变时正常执行。

1.中间的启动服务步骤会失败,但不影响后面的handlers任务正常执行。当修改配置文件监听端口为90,notify语句会触发handlers执行程序任务,从而重启服务,可以使用90端口访问web页。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  force_handlers: yes
  tasks:
    - name: 判断服务是否安装
      yum:
        name: httpd
        state: present

    - name: 更改服务配置文件
      template:
        src: ./file/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify:
       - restart httpd

    - name: 启动服务
      service:
        name: httpds
        state: started
  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

在这里插入图片描述
2.使用受控机ip:90访问web。
在这里插入图片描述

4.3 自定义报错显示信息

  • 使用failed_when指定任务失败条件,再使用fail模块指定要输出的错误信息。
  • 常用于输出的错误信息太多,而我们只需要简短的错误提示即可。或者是运行的脚本里有多个任务,但其中有个任务执行失败但最终输出的信息还是changed,并非一片飘红。

1.当playbook里需要受控机执行主控机上的脚本时,使用script模块来定义。若脚本中有某个任务执行失败,且最后一个任务执行成功,则playbook最后输出的是changed,没有错误信息。

##受控机要执行的脚本。
[root@localhost playbook]# cat file/qingjun.sh 
#!/bin/bash
 echo "qingjun" > 111.txt  
 ls wqlasdas     ##任务执行失败。
 ls 111.txt      ##任务执行成功

##playbook。
[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no   ##关闭收集事实。
  tasks:
    - name: 判断服务是否安装
      script: file/qingjun.sh  
      register: qingjun
    - debug:
        var: qingjun

在这里插入图片描述
2.此时我们可以自定义输出错误信息,加以提示。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断服务是否安装
      script: file/qingjun.sh
      register: qingjun
      ignore_errors: yes
    - name: 自定义错误信息
      fail:
        msg: "有错误,请立即检查脚本!!!"
      failed_when: "'No such file or directory' in qingjun.stdout"

在这里插入图片描述

4.4 自定义“changed”出现时机

  • 特殊场景时需要playbook输出信息一直是changed,或是ok,可以使用。

1.如下使用template模块时,第一次传到受控机会发生改变则输出changed,之后文件没有发生改变则一直输出ok。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断服务是否安装
      template:
        src: file/httpd.conf
        dest: /opt/

在这里插入图片描述
2.此时我想让后面的输出信息一直是changed,则可以添加 changed_when,为True时则输出changed。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断服务是否安装
      template:
        src: file/httpd.conf
        dest: /opt/
      changed_when: True

在这里插入图片描述
3.改为False时,一直输出ok。
在这里插入图片描述

4.5 Ansible块和错误处理

基本了解:

  • block:定义要运行的主要任务,block块中的任务是绑定在一起的,要么一起执行,要么一起不执行。
  • rescue:定义要在block子句中定义的任务失败时运行的任务。
  • always:定义始终都独立运行的任务,不论block和rescue子句中定义的任务是成功还是失败。

用法:

  • 若block块中存在任意一个失败任务,随后会执行rescue块中的任务。
  • block执行失败,则rescue执行;block成功执行,则rescue不会执行;always始终执行。

1.测试一,block块中存在失败任务,则rescue块任务执行。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断服务是否安装
      block:
      - name: block中的任务
        command: echo "block"
      - name: 失败任务
        command: ls sajkdha      ##该任务会执行失败,出触发rescue块任务。
      rescue:
      - name: rescue中的任务
        command: echo "rescue"
      always:
      - name: always中的任务
        command: echo "always"

在这里插入图片描述
2.测试二,block块所有任务全部执行成功,则rescue块任务不执行。而always任务从头到尾都是一直执行的,不受其他块任务影响。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 安装服务
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断服务是否安装
      block:                        ##所有任务执行成功,不会触发rescue任务的执行。
      - name: block中的任务
        command: echo "block"
      - name: 失败任务
        command: echo " 123 " > qqq.txt
      rescue:
      - name: rescue中的任务
        command: echo "rescue"
      always:
      - name: always中的任务
        command: echo "always"

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C4d渲染农场的定义、应用领域和未来发展趋势

Cinema 4D&#xff08;C4D&#xff09;是一款常用于3D动画、建模和渲染的软件&#xff0c;由Maxon Computer开发。随着CG行业的不断发展和应用场景的多样化&#xff0c;C4D渲染农场成为了CG制作中不可或缺的一环。本文将深入介绍C4D渲染农场的概念、特点、应用以及未来发展趋势…

MYSQL索引连环18问(上)

MYSQL索引连环18问&#xff08;上&#xff09; 1.索引是什么&#xff1f; 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分)&#xff0c;它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引&#xff0c;是数据库管理系统中一个排序的…

使用electron套壳vue实现跨平台桌面应用

electron和vue是什么就不用多说了&#xff0c;前端都知道 先展示一波demo 传送门 前提条件 要有一个vue项目&#xff0c;老项目跳过 vue create hello-world改造vue项目 在根目录新建一个background.js文件&#xff0c;也可以叫其他名字&#xff0c;作为package.json的main…

如何查看mysql里面的锁(详细)

通过查询表统计信息查看 information_schema库下相关事务表和锁相关信息表介绍innodb_trx存储了当前正在执行的事务信息trx_id&#xff1a;事务ID。trx_state&#xff1a;事务状态&#xff0c;有以下几种状态&#xff1a;RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。trx…

shell变量的使用 rhce(25)

目录 1.总结变量的类型及含义&#xff1f; 2.实现课堂案例计算长方形面积&#xff1f;&#xff08;6种方式&#xff09; 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815&#xff08;通过多种方法实现&#xff09; &#xff08;1&#xff0…

企业级帮助中心编写方案

随着互联网的飞速发展&#xff0c;越来越多的企业开始将客户服务转向线上服务。在这个过程中&#xff0c;企业级帮助中心因其高效的自助服务和低成本的维护方式受到越来越多企业的青睐。下文将从如何编写一个高质量的企业级帮助中心入手&#xff0c;为您介绍具体步骤。 一、明…

Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial

5.1 基本操作 参考视频: 5 - 1 - Basic Operations (14 控制输出格式的长短 min).mkv 5.1.1 简单运算 不等于符号的写法是这个波浪线加上等于符号 ( ~ )&#xff0c;而不是等于感叹号加等号( ! ) 1 1 1   % 判断相等 2 1 ~ 2   % 判断不等 3 1 && 0   …

jsp基于 JavaWeb+springboot 的校园快递驿站管理系统

不同的系统提供的服务也不相同&#xff0c;其对应的功能也不相同&#xff0c;所以&#xff0c;系统开工前&#xff0c;需要明确其用途&#xff0c;确定其功能。由此&#xff0c;才可以进行各个任务的开展。 校园驿站管理系统经过分析&#xff0c;确定了其需要设置管理员的角色&…

聚焦2023北京安博会,超高清安防应用将成潮流

&#xff08;1&#xff09;2023北京安博会 中国安全防范产品行业协会主办并承办的第十六届&#xff08;2023&#xff09;中国国际社会公共安全产品博览会&#xff08;Security China 2023&#xff09;&#xff0c;将于2023年6月7&#xff5e;10日在北京首钢会展中心开幕。安博…

前端vscode插件bito

GPT-4和ChatGPT越来越火&#xff0c;前端人员是否也能在日常工作中尝试体验其带来的乐趣呢&#xff1f; 答案是可以的&#xff01;安排&#xff01;&#xff01; 今天介绍一款vscode的插件 【bito】。 安装 安装后只需要自己注册一下&#xff0c;创建一个workspace就可以使用…

实验室信息系统源码,LIS源码

实验室信息系统源码&#xff0c;LIS源码 技术细节&#xff1a; SaaS架构的Client/Server应用 体系结构&#xff1a;Client/Server架构 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C# .Net 数据库&#xff1a;Oracle 接口技术&#xff1a;RESTful API HttpW…

全面解析Linux指令和权限管理

目录 一.指令再讲解1.时间相关的指令2.find等搜索指令与grep指令3.打包和压缩相关的指令4.一些其他指令与热键二.Linux权限1.Linux的权限管理2.文件类型与权限设置3.目录的权限与粘滞位 一.指令再讲解 1.时间相关的指令 date指令: date 用法&#xff1a;date [OPTION]… [FOR…

如何在Linux中更改SSH端口?

SSH&#xff08;Secure Shell&#xff09;是一种安全的远程登录协议&#xff0c;它允许您通过网络远程连接到Linux系统并进行管理操作。默认情况下&#xff0c;SSH使用22端口进行通信。然而&#xff0c;为了增强系统的安全性&#xff0c;有时候我们需要更改SSH端口&#xff0c;…

linux 找回root密码(CentOS7.6)

linux 找回root密码(CentOS7.6) 首先&#xff0c;启动系统&#xff0c;进入开机界面&#xff0c;在界面中按“e”进入编辑界面。如图 2. 进入编辑界面&#xff0c;使用键盘上的上下键把光标往下移动&#xff0c;找到以““Linux16”开头内容所在的行数”&#xff0c;在行的最后…

C4D R26 渲染学习笔记 建模篇(2):手动建模

文章目录 前文回顾介绍篇建模篇 手动建模建模快捷键手动模型快捷键大全常用操作N系快捷键K系快捷键U系快捷键 结尾 前文回顾 介绍篇 C4D R26 渲染学习笔记&#xff08;1&#xff09;&#xff1a;C4D版本选择和初始UI框介绍 C4D R26 渲染学习笔记&#xff08;2&#xff09;&am…

Dubbo高可用

1.zookeeper宕机与dubbo直连 1.1.现象&#xff1a;zookeeper注册中心宕机&#xff0c;还可以消费dubbo暴露的服务。 原因&#xff1a; 监控中心宕掉不影响使用&#xff0c;只是丢失部分采样数据数据库宕掉后&#xff0c;注册中心仍能通过缓存提供服务列表查询&#xff0c;但…

软考A计划-试题模拟含答案解析-卷十二

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

AB Test数学原理及金融风控应用

1 什么是AB Test AB测试是一种常用的实验设计方法&#xff0c;用于比较两个或多个不同处理或策略的效果&#xff0c;以确定哪个处理或策略在某个指标上表现更好。在AB测试中&#xff0c;将随机选择一部分用户或样本&#xff0c;将其分为两个或多个组&#xff0c;每个组应用不同…

Java: IO流

1.定义 IO流:存储和读取数据的解决方案 用于读写文件中的数据&#xff08;可以读写文件&#xff0c;或网络中的数据...) 2.IO流的分类 1.按着流的方向 1.输入流&#xff1a;读取 2.输出流&#xff1a;写出 2.按照操作文件类型 1.字节流&#xff1a;所有类型文件 体系&…

机器学习-5 朴素贝叶斯算法

朴素贝叶斯算法 算法概述数理统计学处理的信息古典学派和贝叶斯学派的争论贝叶斯定理朴素贝叶斯分类训练朴素贝叶斯&#xff1a;朴素假设案例&#xff1a;预测打网球拉普拉斯平滑技术小结 算法流程与步骤算法应用sklearn中的朴素贝叶斯朴素贝叶斯的使用算法实例 算法概述 数理…