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

小阿轩yx-案例:Ansible剧本文件实践

小阿轩yx-案例:Ansible剧本文件实践

Playbook 介绍

什么是 playbook

  • playbook 顾名思义,即剧本,现实生活中演员按照剧本表演
  • 在 ansible 中,由被控计算机表演,进行安装,部署应用,提供对外的服务等,以及组织计算机处理各种各样的事情。
  • playbook 是 ansible 用于配置,部署,和管理节点的剧本通过 playbook 的详细描述,执行其中的一些列 tasks,可以让远端的主机达到预期的状态。
  • playbook 就像 ansible 控制器给被控节点列出的一系列 to-do-list,而且被控节点必须要完成。

Ansible play 使用场景

  • 执行一些简单的任务,使用 ad-hoc 命令可以方便的解决问题,但有时一个设施过于复杂需要大量的操作的时,执行的 ad-hoc 命令是不合适的,这时候最好使用 playbook。
  • 就像执行 shell 命令与写 shell 脚本一样,也可以理解为批处理任务,不过 playbook 有自己的语法格式使用 playbook 可以方便的重复使用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。
  • 使用 Ansible 的过程中,会发现,处理的大部分操作都是编写playbook。
  • 可以把常见的应用都编写为 playbook,之后管理服务器会变得很简单。

Playbook 的组成

  • 由一个或多个 “play” 组成的列表

主要功能

  • 通过将 task 定义好的角色归并为组进行统一管理
  • 也就是通过 Task 调用 Ansible 的模板将多个 “play” 组织在一个 Playbook 中运行

Playbook 本身由下面几部分组成

  • Tasks:任务,即调用模块完成的某操作;
  • Variables:变量;
  • Templates:模板;
  • Handlers:处理器,某条件满足时,触发执行的操作;
  • Roles:角色。

恢复上一章 Ansible 部署的快照

Playbook 的简单示例

[root@ansible-node1 ~]# vi a.yml
---
- hosts: webremote user:roottasks :- name: create useruser:name: zhangsanpassword: "{{ 'aptech' | password_hash('sha512') }}"state: presenttags:- CCC
...

执行 playbook,进行语法检查

[root@ansible-node1 ~]# ansible-playbook --syntax-check a.yml

预测试

[root@ansible-node1 ~]# ansible-playbook -C a.ym1

列出主机

[root@ansible-node1 ~]# ansible-playbook --list-hosts a.yml

列出任务

[root@ansible-node1 ~]# ansible-playbook --list-tasks a.yml

列出标签

[root@ansible-node1 ~]# ansible-playbook --list-tags a.yml

执行任务

[root@ansible-node1 ~]# ansible-playbook a.yml

Hosts 和 Users 介绍

Playbook 的设计目的

  • 为了让某个或某些主机以某个用户身份去执行完成相应的任务。
  • 用于指定要执行指定任务的主机用 hosts 定义,可以是一个也可以是由冒号分隔的多个主机组;
  • 用于指定被管理主机上执行任务的用户用 remote user 来定义

如示例所示

- hosts: webremote_user: zhangsan

remote_user 也可定义指定用户通过 sudo 的方法在被管理主机上运行指令, 甚至可以在使用sudo 时用 sudo user 指定 sudo 切换的用户。

[root@ansible-node1 ~]# vim b.yaml
---
- hosts: webremote_user: zhangsantasks:- name: test connectionping:
...

远程连接拷贝

[root@ansible-node1 ~]# ssh-copy-id zhangsan@192.168.10.102

执行

[root@ansible-node1 ~]# ansible-playbook b.yaml

任务列表和 action 介绍

  • Play” 的主体是任务列表(Tasks list)。
  • 任务列表中的任务按照次序逐个在 hosts 中指定的所有主机上执行,在顺序执行这些任务时,如果发生错误会将所有已执行任务回滚。
  • 因此,需要在更正 Playbook 中的错误后重新执行这些任务。

Task 的任务

  • 按照指定的参数去执行模块。
  • 每个 task 使用 name 输出 Playbook 的运行结果一般输出内容为描述该任务执行的步骤。
  • 如果没有提供将输出 action 的运行结果。
  • 定义 task 的格式可以用 “action:module options” 或 “module:options” 都可,其中后者可以实现向后兼容
  • 如果 action 的内容过多,可在行首使用空白字符进行换行。
[root@ansible-node1 ~]# vi a.yml
---
- hosts: webremote_user: roottasks:- name: create usenuser:name: zhangsanpassword: "{{ 'aptech' | password_hash('sha512') }}"state: presenttags:
- hosts: dbremote_user: roottasks:- name: copy file to webcopy: src=/etc/passwd dest=/opttags:- ddd
...
  • - hosts: db
  •   remote_user: root
  •   tasks:
  •     - name: copy file to web
  •       copy: src=/etc/passwd dest=/opt
  •       tags:
  •       - ddd

执行

[root@ansible-node1 ~]# ansible-playbook a.yml
  • 如果多次执行修改的 Playbook 时,涉及到一些没有变化的代码,可以使用 tages 让用户选择跳过没有变化代码,只运行 Playbook 中发生变化的部分代码。
  • 可以在 Paybook 中为某个或某些任务定义 “标签”,在执行此 Playbook 时通过 ansible-playbook 命令的 --tags 选项能实现仅运行指定的 tasks 而非所有的 tasks。

Handlers 介绍

  • Handlers 用于当关注的资源发生变化时所采取的操作。
  • 在 notify 中列出的操作便称为 handler,也就是 notify 中需要调用 handler 中定义的操作。
  • 而 notify 这个动作用于在每个 “play” 的最后被触发,仅在所有的变化发生完成后一次性地执行指定操作。

拷贝模板文件为 /etc/foo.conf 文件时,重新启动 memcached 和 apache 服务

创建 conf 目录

[root@ansible-node1 ~]# mkdir conf

安装 httpd

[root@ansible-node1 ~]# yum -y install httpd

拷贝文件到指定目录下

[root@ansible-node1 ~]# cp /etc/httpd/conf/httpd.conf conf

修改配置文件

[root@ansible-node1 ~]# vim conf/httpd.conf
Listen 8080 //修改端口号

编写配置文件 

[root@ansible-node1 ~]# vim a.yml
- host: webremote_user: roottasks:- name: install httpd packageyum: name=httpd state=latest- name: install configuration file or httpdcopy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf- name: start httpd serviceservice: enabled=true name=httpd state=started

执行

[root@ansible-node1 ~]# ansible-playbook a.yml

登录被管理主机 ansible-node2

[root@ansible-node2 ~]# rpm -qa httpd

查看执行结果

[root@ansible-node2 ~]# grep "Listen" /etc/httpd/conf/httpd.conf | grep -v "#"

查看状态

[root@ansible-node2 ~]# systemctl status httpd

设置 handlers

  • 如果配置文件有改动
  • 如:Apache 端口号改变,则需要定义 notify 和 handlers,触发更新相关执行操作。

修改端口号

[root@ansible-node1 ~]# vim conf/httpd.conf
Listen 808

编写文件

[root@ansible-node1 ~]# vim b.yml
---
- hosts: webremote_user: roottasks:- name: change portcopy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.confnotify:- restart httpd serverhandlers:- name: restart httpd serverservice: name=httpd state=restarted
...

执行

[root@ansible-node1 ~]# ansible-playbook b.yml

node2 上要关闭 selinux,否则,同步配置会出错

登录被管理主机 ansible-node2 进行查看

[root@ansible-node2 ~]# netstat -anpt | grep httpd

Templates 介绍

  • Jinja 是基于 Python 的模板引擎。
  • Template 类似 Jinja 的另一个重要组件,可以看作是一个编译过的模板文件。
  • 用来产生目标文本,传递 Python 的变量给模板去替换模板中的标记。

创建 templates 目录

[root@ansible-node1 ~]# mkdir templates

拷贝文件到指定目录下

[root@ansible-node1 ~]# cp conf/httpd.conf templates/httpd.conf.j2

创建模板文件

[root@ansible-node1 ~]# vim templates/httpd.conf.j2
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}

为远程主机添加变量

[root@ansible-node1 ~]# vim /etc/ansible/hosts
[web]
192.168.10.102 http_port=8888
[db]
192.168.10.103
  • http_port=8888

编写 playbook 文件

[root@ansible-node1 ~]# vim apache.yml
- hosts: webremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name={{ package }} state=latest- name: install configuration file for httpdtemplate: src=/root/templates/httpd.conf,i2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd- name: start httpd serviceservice: enabled=true name={{ service }} state=startedhandlers:- name: restart httpdservice: name={{ service }} state=restarted
  • - restart httpd
  • - name: restart httpd

执行

[root@ansible-node1 ~]# ansible-playbook apache.yml

登录被管理主机 ansible-node2, 执行查看命令

[root@ansible-node2 ~]# grep -i listen /etc/httpd/conf/httpd.conf | grep -v "#"
[root@ansible-node2 ~]# grep -i servername /etc/httpd/conf/httpd.conf | grep -v "#"

Roles 介绍

什么是 Roles

  • Ansible 为了层次化、结构化地组织 Playbook,使用了角色(roles),可以根据层次结构自动装载变量文件、tasks 以及 handlers 等。
  • 只需要在 Playbook 中使用 include 指令便可使用 roles。
  • 简单来讲, roles 就是分别将变量、文件、任务、模块及处理器设置于单独的目录中,便捷地使用它们。

利用 Roles 部署 mariadb

被管理主机配置 yum 源

配置数据库角色

[root@node1 ~]# mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}
mkdir: 已创建目录 "/etc/ansible/roles/mariadb"
mkdir: 已创建目录 "/etc/ansible/roles/mariadb/files"
mkdir: 已创建目录 "/etc/ansible/roles/mariadb/tasks"
mkdir: 已创建目录 "/etc/ansible/roles/mariadb/handlers"

进入 tasks 目录

[root@node1 ~]# cd /etc/ansible/roles/mariadb/tasks/

编写主文件

[root@nodel tasks]# vi main.yml
---
- name: install mariadbyum: name=mariadb-server state=present
- name: install MySOL-pythonyum: name=MySOL-python state=present
- name: move config mariadbshell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"
- name: provide a new config filecopy: src=my.cnf dest=/etc/my.cnf
- name: reload mariadbshell: systemctl restart mariadb
- name: create database testdbshell: mysql -u roote -e "create database testdb;grant all on testdb.* to test'@'192.168.10.%' identified by 'test123';flush privileges;notify:- restart mariadb
...

切换至 handlers 目录

[root@node1 tasks]# cd /etc/ansible/roles/mariadb/handlers

编写触发器文件

[root@localhost handlers]# vi main.yml
---
- name:restart mariadbservice: name=mariadb state=restarted
...

切换至 files 目录

[root@nodel tasks]# cd /etc/ansible/roles/mariadb/files

查看

[root@node1 files]# ls
my.cnf    ##将编辑好的 my.cnf 文件拷贝在此处

切换至 ansible 目录

[root@node1 files]# cd /etc/ansible

编写角色文件

[root@nodel ansible]# vi mariadb.yml
---
- hosts: dbremote_user: rootroles:- mariadb
...

测试角色文件

[root@nodel ansible]# ansible-playbook --syntax-check mariadb.yml

执行 yml 文件

[root@nodel ansible]# ansible-playbook mariadb.yml

检查远程服务器上数据库

  • 查看数据库信息,看看有没有创建制定的数据库

利用 Ansible 管理数据库

用 ansible 查看数据库

[root@localhost ~]# ansible db -m shell -a 'mysql -u root -e "show databases;"'
192.168.10.103 | SUCCESS >> Database
information_schema
mysql
performance_schema
test
testdb

创建账户并授权

[root@localhost ~]# ansible db -m yum -a "name=MySQL-python state=present"
[root@localhost ~]# ansible db -m mysql_user -a "name=zhangsan password=pwd123 host=192.168.10.% priv=*.*:ALL"
[root@localhost ~]# ansible db -m mysql_user -a "name=lisi password=pwd123 priv=*.*:ALL"
  • 张三能够远程登录,但李四不能
  • 要想使用 mysql_user 模块,需要在客户端安装MySQL-python,安装时注意大小写

为老用户授权(语法和创建用户并授权的语法是相同的)

[root@localhost ~]# ansible db -m mysql_user -a "name=root password=pwd123 host=192.168.10.% priv=*.*:ALL"

小阿轩yx-案例:Ansible剧本文件实践

相关文章:

小阿轩yx-案例:Ansible剧本文件实践

小阿轩yx-案例:Ansible剧本文件实践 Playbook 介绍 什么是 playbook playbook 顾名思义,即剧本,现实生活中演员按照剧本表演在 ansible 中,由被控计算机表演,进行安装,部署应用,提供对外的服…...

【ShuQiHere】深入理解微架构(Microarchitecture):LC-3 的底层实现 ️

【ShuQiHere】🖥️ 微架构(Microarchitecture) 是计算机体系结构中的重要概念,它定义了如何将 指令集架构(Instruction Set Architecture, ISA) 转化为实际硬件。通过微架构,我们可以理解计算机…...

Ubuntu24.04.1系统下VideoMamba环境配置

文章目录 前言第一步:基本的环境创建第二步:causal-conv1d和mamba_ssm库的安装第三步:安装requirements.txt 前言 VideoMamba环境的配置折磨了我三天,由于Mamba对Cuda的版本有要求,因此配置环境的时候Cuda版本以及各种…...

c++第十二章续(队列结构类模拟)

队列类 设计类,需要开发公有接口和私有实现 Queue类接口 公有接口: 默认初始化,和可以用显式初始化覆盖默认值 Queue类的实现 如何表示队列数据: 一种方法是使用new动态分配一个数组,它包含所需的元素数。不过&…...

数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall

数据集-目标检测系列-豹子 猎豹 检测数据集 leopard>> DataBall 数据集-目标检测系列-豹子 猎豹 检测数据集 leopard 数据量:5k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集&#x…...

基于ESP8266—AT指令连接阿里云+MQTT透传数据(3)

MQTT_RX设备为接收(订阅)数据的Topic,使用ESP8266通过AT指令实现。 首先需要串口通信软件,如 SSCOM、PuTTY、SecureCRT 等串口调试工具,功能丰富,支持常见的串口调试功能,用于发送AT指令。 以下是ESP8266通过AT指令连接阿里云MQTT服务的步骤: 1、初始化WiFi 发送下面…...

redis的数据结构,内存处理,缓存问题

redisObject redis任意数据的key和value都会被封装为一个RedisObject,也叫redis对象: 这就redis的头信息,占有16个字节 redis中有两个热门数据结构 1.SkipList,跳表,首先是链表,和普通链表有以下差异&am…...

机器学习模型评估与选择

前言 承接上篇讲述了机器学习有哪些常见的模型算法,以及使用的场景,本篇将继续讲述如何选择模型和评估模型。几个概念了解一下: 经验误差:模型在训练集上的误差称之为经验误差;过拟合:模型在训练集上表现…...

Web认识 -- 第一课

文章目录 前言一、HTML是什么?二、了解Web1. 基本概念2.Web标准3. Web构成1.前端1. HTML2.CSS3. javaScript4.常见浏览器介绍 2.Web标签构成1.结构标准2.表现标准 -- css3. 行为标准 -- javaScript 总结 前言 这里是我们进入前端学习的开端,在本次更新之后我会陆续…...

Recaptcha2 图像识别 API 对接说明

Recaptcha2 图像识别 API 对接说明 本文将介绍一种 Recaptcha2 图像识别2 API 对接说明,它可以通过用户输入识别的内容和 Recaptcha2验证码图像,最后返回需要点击的小图像的坐标,完成验证。 接下来介绍下 Recaptcha2 图像识别 API 的对接说…...

6种MySQL高可用方案对比分析

大家好,我是 V 哥,关于 MySQL 高可用方案,在面试中频频出现,有同学在字节面试就遇到过,主要考察你在高可用项目中是如何应用的,V 哥整理了6种方案,供你参考。 MySQL的高可用方案有多种&#xf…...

FastAPI: websocket的用法及举例

1. Websocket 1.1 Websocket介绍 WebSocket 是一种在单个TCP连接上进行全双工通信的协议,允许客户端和服务器之间相互发送数据,而不需要像传统的HTTP请求-响应模型那样频繁建立和断开连接。 全双工通信(Full-Duplex Communication)是一种通信模式&#…...

JavaSE——面向对象2:方法的调用机制、传参机制、方法递归、方法重载、可变参数、作用域

目录 一、成员方法 (一)方法的快速入门 (二)方法的调用机制(重要) (三)方法的定义 (四)注意事项和使用细节 1.访问修饰符(作用是控制方法的使用范围) 2.返回的数据类型 3.方法名 4.形参列表 5.方法体 6.方法调用细节说明 (五)传参机制 1.基本数据类型的传参机制 …...

Vue+Flask

App.vue 首先要安装 npm install axios<template><div><h1>{{ message }}</h1><input v-model"name" placeholder"Enter your name" /><input v-model"age" placeholder"Enter your age" /><…...

深入剖析 Android Lifecycle:构建高效稳定的应用

在 Android 开发中&#xff0c;管理应用组件的生命周期是至关重要的。正确处理生命周期事件可以确保应用的性能、稳定性和用户体验。Android Framework 提供了一系列的机制来管理应用组件的生命周期&#xff0c;而android.arch.lifecycle库则为我们提供了更简洁、更灵活的方式来…...

ElasticSearch分词器、相关性详解与聚合查询实战

目录 1. ES分词器详解 1.1 基本概念 1.2 分词发生时期 1.3 分词器的组成 切词器&#xff1a;Tokenizer 词项过滤器&#xff1a;Token Filter 字符过滤器&#xff1a;Character Filter 1.4 倒排索引的数据结构 2. 相关性详解 2.1 什么是相关性&#xff08;Relevance&am…...

删除二叉树中以x为根节点的子树(包括根结点)

已知二叉树以二叉链表存储&#xff0c;编写算法完成&#xff1a;对于树中每个元素值为x的结点&#xff0c;删除以它为根的子树&#xff0c;并释放相应的空间。 思想&#xff1a; 删除二叉树采用后序遍历。先删除左子树&#xff0c;然后右子树&#xff0c;最后根。 利用层次遍…...

Netty 与 WebSocket之间的关系

WebSocketProtocolHandler 和 Netty 在处理 WebSocket 连接时扮演不同的角色&#xff0c;但它们通常是一起使用的&#xff0c;尤其是在基于 Netty 的项目中。为了更好地理解它们之间的区别&#xff0c;我们首先需要了解 WebSocket 和 Netty 的基本概念。 WebSocket WebSocket…...

通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免

CSMA/CA&#xff1a;载波监听多路访问/冲突避免 CSMA/CA&#xff08;Carrier Sense Multiple Access/Collision Avoidance&#xff09;&#xff0c;即载波监听多路访问/冲突避免&#xff0c;是一种用于数据传输时避免各站点之间冲突的算法&#xff0c;尤其适用于无线局域网&…...

JAVA并发编程系列(13)Future、FutureTask异步小王子

美团本地生活面试&#xff1a;模拟外卖订单处理&#xff0c;客户支付提交订单后&#xff0c;查询订单详情&#xff0c;后台需要查询店铺备餐进度、以及外卖员目前位置信息后再返回。 时间好快&#xff0c;一转眼不到一个月时间&#xff0c;已经完成分享synchronized、volatile、…...

【python爬虫可以获取到谷歌影像吗?】如何有效下载谷歌影像?

【python爬虫可以获取到谷歌影像吗&#xff1f;】如何有效下载谷歌影像&#xff1f; 【python爬虫可以获取到谷歌影像吗&#xff1f;】如何有效下载谷歌影像&#xff1f; 文章目录 【python爬虫可以获取到谷歌影像吗&#xff1f;】如何有效下载谷歌影像&#xff1f;前言1. 使用…...

Windows 上安装 PostgreSQL

Windows 上安装 PostgreSQL PostgreSQL 是一款功能强大的开源关系数据库管理系统,广泛用于各种应用场景。在 Windows 系统上安装 PostgreSQL 相对简单,但需要遵循一系列步骤。本文将详细介绍在 Windows 上安装 PostgreSQL 的过程,并提供一些关键的配置和优化建议。 一、下…...

Vue 技术进阶 day2 数据监视的原理、其他内置指令、自定义指令、生命周期、组件化、VueComponent构造函数

目录 1.Vue监测数据的原理 1.1 原理 1.1.1 数据劫持 1.1.2 观察者模式(Vue内部的实现) 1.1.3 更新组件 1.1.4 计算属性和侦听器 1.2 后添加属性做响应式&#xff08;Vue.set / vm.$set&#xff09; 1.3 对象和数组的响应式 1.4 数据监视案例 2.指令 2.1 内置指令 2.…...

vue.js 原生js app端实现图片旋转、放大、缩小、拖拽

效果图&#xff1a; 旋转 放大&#xff1a;手机上可以双指放大缩小 拖拽 代码实现&#xff1a; html <div id"home" class"" v-cloak><!-- 上面三个按钮 图片自己解决 --><div class"headImage" v-if"showBtn">&l…...

MyBatis的注入问题

对之前文章的补充&#xff1a;MyBatis中的#{}与${}注入问题----原文链接 前言&#xff1a; MyBatis是一个流行的Java持久层框架&#xff0c;用于将对象与数据库中的数据进行映射。然而&#xff0c;如果不当使用&#xff0c;MyBatis也可能受到诸如SQL注入这类的安全问题的影响。…...

基于springboot的评分评教管理系统

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的评分评教管理系统1拥有三种角色 管理员&#xff1a;评价管理、学生管理、评分指标管理、课程管理、教师管理、管理员管理等教师&#xff1a;课程管理、学生管理、个人信…...

C嘎嘎入门篇:类和对象(2)

前言&#xff1a; 上一篇小编讲了类和对象&#xff08;1&#xff09;&#xff0c;当然&#xff0c;在看这篇文章之前&#xff0c;读者朋友们一定要掌握好前面的基础内容&#xff0c;因为这篇和前面息息相关&#xff0c;废话不多说&#xff0c;下面小编就加快步伐&#xff0c;开…...

数据库 - Mongo数据库

目录 前言 一、MongoDB的特点 二、Mongo的核心概念 三、MongoDB的优劣势 四、使用场景 五、MongoDB与其他数据库的对比 六、如何安装MongoDB 七、数据库指令操作 &#xff08;一&#xff09;基本数据库操作 &#xff08;1&#xff09;连接 MongoDB &#xff08;2&am…...

工业控制过等保三级需要的网络安全设备及详细讲解

在工业控制系统&#xff08;ICS&#xff09;的安全性日益受到重视的背景下&#xff0c;网络安全等级保护&#xff08;过等保&#xff09;三级作为一种重要的安全标准&#xff0c;对保障工业控制系统的安全运行有着重要的意义。过等保三级主要针对那些对安全性要求较高的系统&am…...

Android开发高级篇:MVVM框架与数据双向绑定

在Android开发中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式以其高效、简洁的特点&#xff0c;成为越来越多开发者的首选。MVVM不仅实现了界面&#xff08;UI&#xff09;与业务逻辑的分离&#xff0c;还通过数据双向绑定技术&#xff0c;极大地简化…...

杨浦网站建设 网站外包/沈阳seo排名公司

前言 我们知道&#xff0c;React Fiber是React v16中新的reconciliation引擎&#xff0c;是React团队用时2年对Stack Reconciler版本的核心算法进行的重写。它的主要目标是实现虚拟DOM的增量渲染&#xff0c;可以将渲染工作拆分成块并将其分散到多个帧的能力。在新的更新到来时…...

python做动态网站/加盟培训机构

引用 C中有一个很方便的语法叫做引用&#xff0c;作用就是使得函数能够对传入的参数作出全局有效的改动。用法很简单&#xff0c;就是在传入参数的类型后面加上&就可以指明传入的参数是引用。 例子&#xff1a; #include <stdio.h>void change(int& x){x 1; } i…...

电脑本地网站建设/全媒体运营师报考条件

Fuchsia 起航 Debian sudo apt-get install build-essential curl git python unzip 复制代码 下载源码 curl -s "https://fuchsia.googlesource.com/scripts//master/bootstrap?formatTEXT" | base64 --decode | bash 复制代码 配置一下环境变量 cp .jiri_root/bin…...

久久建筑网会员/网站关键词优化公司哪家好

基本概念IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取, 它就通知该进程. IO多路复用适用如下场合:(1)当客户处理多个描述字时(一般是交互式输入和网络套接口), 必须使用I/O复用.(2)当一个客户同时处理多个套接口时, 而这种情况是可能的, 但很少出现.(3)如果…...

网站建设与管理专业找暑假工/邯郸seo排名

两个虚拟机产品Sun VirtualBox 和 VMware Workstation&#xff0c;两家公司Sun Microsystems, Inc.&#xff08;被Oracle收购&#xff09;和VMware, Inc.&#xff0c;两种模式开源和商业。 由于新买了电脑&#xff0c;cpu支持vt-x&#xff08;intel的硬件支持虚拟化加速&#x…...

建设一个自己的网站首页/网络营销推广工具

由于国内Android市场众多渠道&#xff0c;为了统计每个渠道的下载及其它数据统计&#xff0c;就需要我们针对每个渠道单独打包&#xff0c;如果让你打几十个市场的包岂不烦死了&#xff0c;不过有了Gradle&#xff0c;这再也不是事了。 友盟多渠道打包 废话不多说&#xff0c…...