ansible常用模块使用方法

2023-11-08

ansible-playbook执行方法

#这个是你选择的主机
- hosts: webservers
#这个是变量
  vars:
    http_port: 80
    max_clients: 200
#远端的执行权限
  remote_user: root
  tasks:
  
如果有些系统做了相关的sudo限制,需要在playbooks里面开启sodu,或者直接偷懒,权限直接为root !
- hosts: web
  remote_user: kangkang
  tasks:
    - service: name=nginx state=started
      sudo: yes        #是否提权  默认sudo为root
      sudo_user:root ####sudo提权为root用户

#执行剧本,playbook里面定义过变量,可以使用-e指定变量覆盖文件内的变量,-e优先级最高
ansible-playbook diskpart.yaml [-e disk=/dev/sdb diskfullpath=/dev/sdb1 mountDir=da

ansible-playbook  #使用方法
ansible-playbook    文件名.yml    --syntax-check   ##检查playbook文件的语法是否正确
ansible-playbook     文件名.yml      #执行
#如果过程有报错想要执行 其中的一个步骤 可以根据tags标签来进行单独执行命令:
语法:ansible-playbook --tags="标签名"  文件名.yml 
举例: ansible-playbook --tags="link"  文件名.yml   #执行上面的软连接部分


13.absible test -m script -a 'test.sh' :
将本地的tesh.sh在远程主机上运行(脚本所在路径只能使用相对路径)


11.ansible all -m set up : 查看远程主机的信息
12.ansible all -m service -a 'name=httpd enabled=yes':设定服务是否开机启动
name=:服务名称,如httpd

通过命令行指定变量,优先级最高
ansible-playbook –e varname=value

ansible test -m shell -a 'echo abcd1234|passwd --stdin user1'       #修改密码  修改之后最好确认一下 最好使用script脚本方式修改  #此方法不保险


YUM模块(yum)

- name: Download the nginx package but do not install it   #下载nginx包但不安装
  yum:					 	#YUM模块
    name:
      - nginx				#安装包名称
    state: latest
    download_only: true           ##只下载包不安装
    
    
- name: Install a list of packages  #安装多个数据包
  yum:
    name:
      - nginx
      - php
      - mysql
    state: present  
    
- name: install nginx rpm from a local file    ##安装本地rpm包文件
  yum:
    name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    state: present
    
- name: ensure a list of packages installed   ##嵌入变量 下载安装包列表
  yum:
    name: "{{ packages }}"
  vars:
    packages:
    - httpd
    - httpd-tools

- name: remove the Apache package       ### state 为absent  卸载httpd软件包
  yum:
    name: httpd
    state: absent


USER 用户模块(user)

groups:指定用户的属组
uid:指定用的uid
password:为用户设置登陆密码,此密码是明文密码加密后的密码
update_password:always/on_create
    always:只有当密码不相同时才会更新密码(默认)
    on_create:只为新用户设置密码
name:指定用户名
createhome:是否创建家目录 yes|no(默认是yes)
system:是否为系统用户
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r(默认是no)
state:是创建还是删除 present(添加(默认值))or absent(移除)
shell:指定用户的shell环境
append:yes/no
    yes:增量添加group
    no:全量变更group,只设置groups指定的group(默认)
expires:设置用户的过期时间,值是一个时间戳

    3、注意事项
  注:指定password参数时,不能使用后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
- user: name=johnd comment="John Doe" uid=1040 group=admin
- user: name=james shell=/bin/bash groups=admins,developers append=yes
- user: name=johnd state=absent remove=yes
- user: name=james18 shell=/bin/zsh groups=developers expires=1422403387
#生成密钥时,只会生成公钥文件和私钥文件,和直接使用ssh-keygen指令效果相同,不会生成authorized_keys文件。
- user: name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa


       - name: "add user docker"
         user: name={{ item.name }} password={{ item.dockerpass | password_hash('sha512') }} state=present  update_password=always          ##密码需要加密 不然执行报警告 。不加密也可以执行  没有查是版本还是其他问题
         with_items:
         - { name: 'docker', dockerpass: '123123' }     
         tags:
         - add user docker
         
         
         # 删除用户'
         user:
            name: johnd
            state: absent
            remove: yes
            
         #更新用户密码
         user: name={{ item.name }} password={{ item.rootpass | password_hash('sha512') }} state=present  update_password=always 
         with_items:
         - { name: 'root', rootpass: '123123' }     
         tags:
         - update passwd
            
创建三个用户
    - name: create user
      user: name={{item}} 
      with_items:
        - xixi
        - haha
        - memeda

FILE模块文件(file)

# touch文件,但添加/删除一些权限
- file:
    path: /etc/foo.conf
    state: touch
    mode: "u+rw,g-wx,o-rwx"	  #选项: file, link, directory, hard, touch, absent
##类似同上 稍微有点区别
# touch a file, using symbolic modes to set the permissions (equivalent to 0644)
- file:
    path: /etc/foo.conf
    state: touch
    mode: "u=rw,g=r,o=r"


# 更改文件所有权、组和模式。使用八进制数指定模式时,第一个数字应始终为0
- file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644
# 使用file模块创建软连接
 - file:
    src: /file/to/link/to
    dest: /path/to/symlink
    owner: foo
    group: foo
    state: link
# 创建目录并赋予755权限
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755


SERVICE服务模块(service)

#触发重启服务器
    notify:
    - restart apache          ##  handlers -name引用名
  - name: ensure apache is running
    service: name=httpd state=started
#这里的restart apache 和上面的触发是配对的。这就是handlers的作用。相当于tag
  handlers:
    - name: restart apache    ##   notify:引用名
      service: name=httpd state=restarted

# 如果httpd没有启动 就启动httpd服务
- service:
    name: httpd
    state: started           #参数可选( started, stopped, restarted, reloaded )
    enabled: yes  #开机启动     参数可选( yes,no )

#如果httpd启动 就关闭httpd服务
- service:
    name: httpd
    state: stopped

#重启网络网卡
# Example action to restart network service for interface eth0
- service:
    name: network
    state: restarted
    args: eth0      #注意网卡接口名


#可以使用
# Example action to start service foo, based on running process /usr/bin/foo
- service:
    name: foo
    pattern: /usr/bin/foo
    state: started

LINEINFILE文件修改模块(lineinfile)

path参数 :必须参数,指定要操作的文件。

line参数 : 使用此参数指定文本内容。

backup参数:是否在修改文件之前对文件进行备份。

create参数 :当要操作的文件并不存在时,是否创建对应的文件。

regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。

state参数:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意,表示删除,state的默认值为present。

backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。

insertafter参数:借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可以设置为EOF或者正则表达式,EOF为End Of File之意,表示插入到文档的末尾,默认情况下insertafter的值为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则的行之后,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。

insertbefore参数:借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数的值可以设置为BOF或者正则表达式,BOF为Begin Of File之意,表示插入到文档的开头,如果将insertbefore的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。


# 替换config文件中匹配到的SELINUX=开头的行替换为SELINUX=enforcing'
- lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: 'SELINUX=enforcing'
#删除/etc/sudoers文件%wheel开头的行
- lineinfile:
    path: /etc/sudoers
    state: absent
    regexp: '^%wheel'
#替换行,并指定用户,组,权限。
- lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.0\.1'
    line: '127.0.0.1 localhost'
    owner: root
    group: root
    mode: 0644

- lineinfile:
    path: /etc/httpd/conf/httpd.conf
    regexp: '^Listen '
    insertafter: '^#Listen '  #EOF末尾插入行
    line: 'Listen 8080'        #替换regexp匹配到的行

- lineinfile:
    path: /etc/services
    regexp: '^# port for http'
    insertbefore: '^www.*80/tcp'  #BOF开头插入行
    line: '# port for http by default'   #替换行
    
#如果文件不存在,则向其添加一行 新建文件
# Add a line to a file if it does not exist, without passing regexp
- lineinfile:
    path: /tmp/testfile
    line: '192.168.1.99 foo.lab.net foo'

# 虽然也是替换行,需注意单引号。 原样输出
- lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%wheel\s'
    line: '%wheel ALL=(ALL) NOPASSWD: ALL'

# Yaml requires escaping backslashes in double quotes but not in single quotes
- lineinfile:
    path: /opt/jboss-as/bin/standalone.conf
    regexp: '^(.*)Xms(\\d+)m(.*)$'
    line: '\1Xms${xms}m\3'
    backrefs: yes

# Validate the sudoers file before saving
- lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%ADMIN ALL='
    line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
    validate: '/usr/sbin/visudo -cf %s'

SETUP模块(setup)

  主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果)

  每个被管理节点在接收并运行管理命令之前,会将自己主机相关信息(如系统版本,主机IP地址)告知ansible管理主机

####   1、帮助信息

ansible-doc -s setup

--tree :将所有主机的输出信息保存到/tmp/目录下,以/etc/ansible/hosts里的主机名为文件名
ansible all -m setup -a 'filter=ansible_distribution_version' --tree /tmp/

filter :过滤关键字
#ansible db -m setup -a 'filter=ansible_distribution_version'

gather_subset:按子集收集信息,值有all, min, hardware, network, virtual, ohai, facter。不包含请使用!号,如,!network

CRON 定时任务模块(cron)

  ansible-doc -s cron
 
 1 backup:对远程主机上的原任务计划内容修改之前做备份 
 2 cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划 
 3 day:日(1-31,**/2,……) 
 4 hour:小时(0-23,**/2,……)  
 5 minute:分钟(0-59,**/2,……) 
 6 month:月(1-12,**/2,下·……) 
 7 weekday:周(0-7,*,……)
 8 job:要执行的任务,依赖于state=present 
 9 name:该任务的描述 
10 special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly 
11 state:确认该任务计划是创建还是删除 
12 user:以哪个用户的身份执行

  2、使用说明
ansible db -m cron -a 'minute=""  hour="" day="" month="" weekday="" job="" name="(必须填写)" state=
    1、定时设置指定值的写入即可,没有设置的可以不写(默认是*)
    2、name必须写
    3、state有两个状态:present(添加(默认值))or absent(移除)

3、使用范例
    1、添加定时任务
ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="present"'
ansible db -a "crontab -l"


    2、移除定时任务
ansible db -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state="absent"'
ansible db -a "crontab -l"

ansible-playbook for循环

---
- hosts: testweb
  remote_user: root
  vars:           ####  定义变量 :(listen = 8080)
    nginx_vhosts:
      - listen: 8080
      
{% for vhost in nginx_vhosts %}         ##for循环吧 vars定义的nginx_vhosts变量值定义给vhost 
server {
listen {{ vhost.listen }}                ####引用变量值
}
{% endfor %}


#生成的结果
server {
listen 8080
}



#########################################################################
- hosts: mageduweb
  remote_user: root
  vars:
    nginx_vhosts:
      - web1:
        listen: 8080
        root: "/var/www/nginx/web1/"
      - web2:
        listen: 8080
        server_name: "web2.abc.com"
        root: "/var/www/nginx/web2/"
      - web3:
        listen: 8080
        server_name: "web3.abc.com"
        root: "/var/www/nginx/web3/"
  tasks:
    - name: template config to
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
{% if vhost.server_name is defined %}
server_name {{ vhost.server_name }}
{% endif %}
root {{ vhost.root }}
}
{% endfor %}

#生成的结果

server {
listen 8080
root /var/www/nginx/web1/
}
server {
listen 8080
server_name web2.abc.com
root /var/www/nginx/web2/
}
server {
listen 8080
server_name web3.abc.com
root /var/www/nginx/web3/
}

ansible-playbook 判断条件

- hosts: appsrvs
  remote_user: root
 
  tasks:
    - name: install package
      yum: name=httpd
    - name: template 6
      template: src=httpd_6.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: restart service
      when: ansible_distribution_major_version == "6"      ###判断条件 判断系统版本为6 
 
    - name: template 7      
      template: src=httpd_7.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: restart service      
      when: ansible_distribution_major_version == "7"   ###判断条件 判断系统版本为7
    - name: start service
      service: name=httpd state=started
 
  handlers:
    - name: restart service

一、在剧本的当前目录创建templates文件夹(template只能在剧本使用)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FAxcWMrq-1609398596206)(C:\Users\LYK\AppData\Roaming\Typora\typora-user-images\image-20201231150030799.png)]

​ 用作模板文件。在基于playbook进行修改

ansible内置变量

4.play_hosts变量是用来返回当前playbook运行的主机信息,返回格式是主机list结构,inventory_dir变量是返回当前playbook使用的Inventory目录
  
5.获取当前操作的所有主机名
inventory_hostname变量是返回Inventory文件里面定义的主机名,inventory_hostname_short会返回I文件中主机名的第一部分
  ansible test_group -m debug -a "msg={{inventory_hostname}}"
6. groups变量是一个全局变量,它会打印出Inventory文件里面的所有主机以及主机组信息
groups
ansible master -m debug -a "msg={{groups.test}}"

7.获取主机所在组的名称
 group_names
8.获取主机清单目录
 inventory_dir

2、经常获取的信息,统计表格如下
关键字 说明 返回值例子
ansible_nodename 节点名 “6-dns-1.hunk.tech”
ansible_fqdn FQDN名 “6-dns-1.hunk.tech”
ansible_hostname 主机短名称 “6-dns-1”
ansible_domain 主机域名后缀 “hunk.teh”
ansible_memtotal_mb 总物理内存 “ansible_memtotal_mb”: 222
ansible_swaptotal_mb SWAP总大小 “1023”
ansible_processor CPU信息 Intel® Core™ i5-5200U CPU @ 2.20GHz
ansible_processor_cores CPU核心数量 4
ansible_processor_vcpus CPU逻辑核心数量 2
ansible_all_ipv4_addresses 有所IPV4地址 192.168.0.200
ansible_all_ipv6_addresses 所有IPV6地址
ansible_default_ipv4 默认网关的网卡配置信息
ansible_eth2 具体某张网卡信息 不同系统名称需要变化
ansible_dns DNS设置信
ansible_architecture 系统架构 x86_64
ansible_machine 主机类型 x86_64
ansible_kernel 内核版本 “2.6.32-696.el6.x86_64”
ansible_distribution 发行版本 “CentOS”
ansible_distribution_major_version 操作系统主版本号 “6”
ansible_distribution_release 发行版名称 “Final”
ansible_distribution_version 完整版本号 “7.4.1708”
ansible_pkg_mgr 软件包管理方式 “yum”
ansible_service_mgr 进行服务方式 “systemd”
ansible_os_family 家族系列 “RedHat”
ansible_cmdline 内核启动参数
ansible_selinux SElinux状态 “disabled”
ansible_env 当前环境变量参数
ansible_date_time 时间相关
ansible_python_version python版本 “2.6.6”
ansible_lvm LVM卷相关信息
ansible_mounts 所有挂载点
ansible_device_links 所有挂载的设备的UUID和卷标名
ansible_devices 所有/dev/下的正在使用的设备的信息
ansible_user_dir 执行用户的家目录 “/root”
ansible_user_gecos 执行用户的描述信息 "The root "
ansible_user_gid 执行用户的的GID 0
ansible_user_id 执行用户的的用户名 “root”
ansible_user_shell 执行用户的shell类型 “/bin/bash”
ansible_user_uid 执行用户的UID 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ansible常用模块使用方法 的相关文章

  • Bash 'printf' 相当于命令提示符?

    我希望在 Windows 命令提示符下将一些字符串输入通过管道传输到一个小型 C 程序 在 bash 中我可以使用 printf AAAAA x86 x08 x04 xed program 本质上 我需要一些东西来转义命令提示符中的那些十六
  • 干净地销毁System V共享内存段

    我在用shmget shmat and shmctl分别获取和创建共享内存段 将其附加到进程地址空间中并删除它 我想知道进程是否仍然可以使用共享内存段 即使它已被分离并要求使用删除 shmctl id IPC RMID 在一个过程中 我无法
  • 使用 gatttool 或 bluepy BLE 订阅通知

    我正在使用 bluepy 编写一个程序 用于监听蓝牙设备发送的特征 我还可以使用任何库或语言 唯一的限制是在 Linux 上运行 而不是在移动环境中运行 似乎仅在移动设备中广泛使用 没有人在桌面上使用 BLE 使用 bluepy 我注册了委
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • Linux:通过网络进行屏幕桌面视频捕获和 VNC 帧速率

    抱歉 文字墙很长 TL DR VNC 连接的帧速率是多少 以帧 秒为单位 或者更确切地说 由谁决定 客户端还是服务器 对于桌面屏幕捕获的任何其他建议 但 正确的时间编码 具有不抖动的帧速率 具有稳定的周期 并有可能将其作为未压缩 或无损 图
  • 访问 Linux 线程(pthreads)的本地堆栈

    我目前正在实现一个使用多线程但对总内存消耗有要求的应用程序 我希望有一个主线程执行 I O 并有几个工作线程执行计算 目前 我在主堆栈上有几个可供工作人员访问的数据结构 我使用 OpenMP 进行工作分配 由于主 工作者模式不能很好地与 O
  • 当存在点和下划线时,使用 sed 搜索并替换

    我该如何更换foo with foo sed 只需运行 sed s foo foo g file php 不起作用 逃离 sed s foo foo g file php Example cat test txt foo bar sed s
  • Bash 完成脚本在某些参数选项后完成文件路径

    我正在为命令行工具编写 bash 完成脚本 plink local cur prev opts COMPREPLY cur COMP WORDS COMP CWORD prev COMP WORDS COMP CWORD 1 opts 1
  • 在64位操作系统上以32位模式和64位模式编译ioctl函数的执行有什么不同?

    我有 64 位 Enterprise SuSE 11 我有一个应用程序 它打开 HIDRAW 设备并在其上操作 ioctl 函数以从该设备获取原始信息 如下所示 struct hidraw devinfo devinfo int fd op
  • 如何在Windows Git shell中运行./script.sh?

    也许这很尴尬 但是当我在 Git shell 中工作时 我无法在 Windows 上运行 sh 文件 也许我必须安装一些东西 但我认为 Git 会支持 bash 命令 我知道 Windows 不使用 sh 文件 我正在执行安装步骤游戏结束
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • 如何将文件中的值分配给 UNIX sh shell 中的变量?

    我一直在搜索这个网站 试图找到这个问题的答案 并发现了几个非常好的答案 不幸的是 它们都不适合我 这是我正在使用的脚本 VALUE cat szpfxct tmp export VALUE echo gt gt LGFILE echo te
  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • 如何从 C 函数创建 shell 命令

    想知道如何获取一组 C 函数并将它们转换为 shell bash 命令 假设我有一组简单的 C 函数 int fn1 some C code for function 1 int fn2 some C code for function 2
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • gnome-terminal 新选项卡,使用别名作为要执行的命令

    我已经创建了一个别名 bashrc文件如下 alias myproject cd Desktop myproject 当我重新启动终端时保存文件后 输入myproject带我到项目目录 但是当我尝试使用别名作为新的命令参数时gnome te
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并

随机推荐

  • 音频放大器的设计

    摘要 进入21世纪以后 各种便携式的电子设备成为了电子设备的一种重要的发展趋势 从作为通信工具的手机 到作为娱乐设备的MP3播放器 已经成为差不多人人具备的便携式电子设备 所有这些便携式的电子设备的一个共同点 就是都有音频输出 也就是都需要
  • 微信小程序模板消息发送功能实现

    前言 发送微信模板消息首先需要用户去绑定openId和serverOpenId才能推送模板消息 1 微信配置项 1 微信小程序根据前端返回的code去获取unionId和openid 通过type 0的接口去请求 2 用户获取到unionI
  • JasperSoft Studio的使用(1)——软件介绍及创建空白模板

    最近工作中需要用到报表打印 像pdf中多个table的展示 一个List在新的一页中显示列头等 JasperSoft 正好可以满足这些需求 所以记录一下 用以分享 软件介绍 JasperSoft Studio是一个面向 JasperRepo
  • 华为Java社招面试经历详解【已拿到offer】

    这篇文章主要介绍了华为Java社招面试经历 详细记录了华为java面试的流程 相关面试题与参考答案 需要的朋友可以参考下 看看自己能答对多少 如果能回答70 的题目 就大胆去阿里以及各互联网公司试试身手吧 本篇建议大家收藏 备用 华为Jav
  • Qt Creator release版本进行调试

    一 背景 我们在进行性Qt Creator 进行开发时 想要调试代码 通常是只需要编译 debug 版本的程序 但对于很多大型项目 引用外部第三方库中难免只存在release版本的动态库 所以 当我们的程序进行debug 调试时 往往会编译
  • window零基础部署langchain-ChatGLM

    一 介绍 从0开始安装运行langchain ChatGLM 6b int4模型 主要是版本要配套不然特别容易报错 我的机器配置CPU是Intel Core i7 7700HQ CPU 2 80GHz 2 80 GHz GPU8G 二 相关
  • 腾讯 13 年,我所总结的Code Review终极大法

    关注并星标腾讯云开发者 每周1 鹅厂工程师带你审判技术 第3期 林强 Code Review 我都 CR 些什么 谚语曰 Talk Is Cheap Show Me The Code 知易行难 知行合一难 嘴里要讲出来总是轻松 把别人讲过的
  • 蓝桥杯C/C++省赛:颠倒的价牌

    目录 题目描述 思路分析 AC代码 题目描述 小李的店里专卖其它店中下架的样品电视机 可称为 样品电视专卖店 其标价都是4位数字 即千元不等 小李为了标价清晰 方便 使用了预制的类似数码管的标价签 只要用颜色笔涂数字就可以了 这种价牌有个特
  • Java之美[从菜鸟到高手演变]之设计模式四

    在阅读过程中有任何问题 请及时联系 egg 邮箱 xtfggef gmail com 微博 http weibo com xtfggef 转载请说明出处 http blog csdn net zhangerqing 其实每个设计模式都是很重
  • html表格标签使用与注意事项

    表格的基本标签 场景 在网页中以行 列的单元格的方式整齐展示和数据 如 学生成绩表 基本标签 标签名 作用 table 表格的整体 用于包含多个tr tr 表格的每行 用于包含多个td td 表格单元格 用于包含内容 注意事项 嵌套关系为
  • 微信小程序分包加载,分包加载的优势

    微信小程序分包加载 有时候我们的小程序太大 首次打开小程序的时候会比较慢 可以进行分包处理 按照功能的划分 拆分成几个分包 让用户在操作小程序的时候按需下载资源 用户在进入某些页面的时候才去下载相应的资源 加载这个功能对应的分包 使用分包可
  • springboot设置logback-spring.xml的加载路径

    springboot将应用程序打包成jar以后 默认是将logback spring xml放在jar包里面根路径下 图 如果我们需要springboot加载jar包外部的logback spring xml应该怎么做了 例如我们想加载与x
  • shuffle机制详解

    将map输出作为输入传递给reducer的过程称为shuffle Shuffle过程包含在Map和Reduce两端 map阶段大致过程为 写数据 分区 排序 将属于同一分区的输出合并一起写在磁盘上 每个map任务都有一个环形内存缓冲区用于存
  • 服务里面找不到MySQL

    今天在连接数据库时发现自己的数据库出现了问题 在命令窗口输入 net start mysql 命令 还是启动不了 发现在服务里面竟然没有mysql服务了 1 以管理员身份运行cmd 切换到mysql安装目录的bin路径下 2 运行命令 my
  • C++构造函数简单实现电梯控制程序

    对于电梯 属性之一就是位置 所以要实现这一程序 要设置电梯的初始位置和按下电梯按钮改变的电梯的位置 代码如下 include
  • 【Linux】利用云服务器搭建云盘替代百度网盘、OneDrive等,docker安装seafile服务端,实现网页端上传下载,本地Linux、Windows安装客户端实时同步

    写在前面 博主使用OneDrive比较多 教育版有1t的大小 但是由于OneDrive在Linux系统中通过API不能连接学校的教育版 因此迫切需要一个云盘来替代OneDrive 由于之前也使用过Seafile 因此考虑使用Seafile搭
  • 编辑器正则替换px为rem

    正则部分 d d px 被替换部分 calc 1rem 100 注 此方法只能替换原css文件内无calc 运算的
  • 关于Unicode,UTF-8,GB编码详解

    内容来自网络 有部分修正 一 首先我们需要明白关于字符 character 字符集 character set 字符编码方式 character encoding 的概念 字符 字符是抽象的最小文本单位 它没有固定的形状 可能是一个字形 而
  • [901]sqlite数据库的导出与导入

    文章目录 SQLite 获取所有表名 通过 sqlite3 test db 命令进入sqlite数据库的shell 操作 python 脚本 help 直接导出csv文件 SQLite 仅仅支持 ALTER TABLE 语句的一部分功能 我
  • ansible常用模块使用方法

    ansible playbook执行方法 这个是你选择的主机 hosts webservers 这个是变量 vars http port 80 max clients 200 远端的执行权限 remote user root tasks 如