- command:在被控节点上执行命令
- command 是 Ansible 的默认模块,可以不通过 -m 指明使用该模块
- 可以直接执行 -a 中的命令,但由于不通过 shell 执行,所以与 shell 有关的变量、重定向、管道等功能无法使用
- kwargs:
- chdir:目录名。首先跳转到该目录后再执行命令
- shell:在被控节点上通过 shell 执行命令
- 与 command 模块基本相同,而且由于通过 shell 执行,所以可以使用变量、重定向、管道等功能,并且使用所选用户的默认 shell
- kwargs:
- chdir:目录名。首先跳转到该目录后再执行命令
- script:在被控节点上执行主控节点上的脚本
- 直接在 -a 中指明主控节点上的脚本位置即可,且这个脚本需要有 x 权限
- ping:检测某个目的节点是否响应
- 这个检测过程并不向目的节点发送 ping 包,只是反映目的节点是否可控,目的节点即使在可达的情况下也不一定可控
- 不指定 -a
- yum:在被控节点上通过 yum 管理软件
- kwargs:
- name:软件包名称。如果为 * ,则执行 yum -y updtae;名称前面加 @ 为安装软件包组;名称前面加 @^ 为安装环境组;这个参数也可以是 url,此时通过指定的 rpm 文件进行安装
- state:软件安装状态。如果为 present、latest 或 installed 则执行安装软件;如果为 absent 或 removed 则执行移除软件
- kwargs:
- copy:从主控节点向被控节点复制文件
- kwargs:
- src:主控节点的文件位置。可以是绝对路径或相对路径,如果是一个目录,将会进行递归复制
- dest:被控节点的文件位置。必须为绝对路径,且如果 src 是一个目录,dest 也必须为一个目录
- directory_mode:递归设定目录的权限。默认为系统默认权限
- force:是否覆盖。默认为 yes,即当目标文件和源文件不同时,强制覆盖文件,如果为 no 则只有在目标文件不存在时才复制
- kwargs:
- fetch:从被控节点向主控节点复制文件
- 与 copy 模块并不仅仅是方向相反,copy 可以复制文件和目录,而 fetch 模块只能复制文件
- kwargs:
- src:被控节点的文件位置。
- dest:文件在主控节点中的保存位置。真实的保存目录需要注意,如果指定了 dest 参数为 /foo,被控节点为 bar,则文件将会保存在 /foo/bar/ 下
- fail_on_missing:被控节点中的文件不存在时是否报错。默认为 no,当为 no 时即使文件不存在也不会报错,此时主控节点也不会创建相应的目录
- synchronize:通过 rsync 传输文件
- kwargs:
- src:源文件的位置。
- dest:目标文件的位置。
- mode:推送模式或拉取模式。默认为推送模式 push,从主控节点向被控节点传输文件
- delete:是否删除文件使两方一致。两方的一致性以推送方为准,默认为 no
- kwargs:
- service:用于管理服务
- kwargs:
- name:服务名称。
- state:对服务的操作。包括启动(started)、停止(stopped)、重启(restarted)、重新加载(reloaded)
- enabled:是否开机启动。且 state 和 enabled 两个参数中至少要有一个
- sleep:在 state=restarted 的时候,指定在 stop 和 start 之间暂停的秒数
- kwargs:
- get_url:通过 http/https/ftp 下载文件
- kwargs:
- url:下载的 uri
- dest:文件下载目标位置。如果 dest 为目录,则使用服务器提供的文件名,或者如果没有提供,将使用远程服务器上的 url 的基本名称。
- timeout:设置超时时间。默认为 10s
- headers:指定访问时的请求头。以 key: value 的格式填写
- kwargs:
查看文件中的重复行
1 | sort <filename> | uniq -cd |
uniq
命令用于报告重复的行,但只能用于相邻的两行,因此需要先用 sort
对文件中的个行进行排序。加入 -d
参数能把重复的行显示出来,加入 -c
参数能显示重复的行重复了多少次。
使用 pymysql 模块时查询返回字典的方法
使用 pymysql
模块在 MySQL 中进行查询时,如果是使用以下这种默认的查询方法时,调用 fetchone()
和 fetchall()
返回的查询结果将会分别是元组和嵌套元组,只能使用下标去访问查询出来的每个字段的值,相当不方便,也不灵活。
1 | import pymysql |
最方便的返回莫过于字典了,字段名作为键名,查询出来的值作为键值,与字段的顺序无关。需要在查询的时候返回字典,只需要在连接参数中指定一个 cursorclass
参数为 pymysql.cursors.DictCursor
即可,使用 fetchone()
和 fetchall()
返回的查询结果分别为字典和以每一行为一个字典组成的列表。
1 | import pymysql |
CentOS 7 上的 systemctl 配置
CentOS 7 的服务 systemctl
脚本存放在目录 /usr/lib/systemd/
下,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务即 /usr/lib/systemd/system/
目录下。
CentOS 7 的每一个服务以 .service 结尾,一般会分为 3 部分:[Unit]、[Service] 和 [Install]。
[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别
[Service]部分是服务的关键,是服务的一些具体运行参数的设置。
Type=forking 是后台运行的形式,
User=users 是设置服务运行的用户,
Group=users 是设置服务运行的用户组,
PIDFile 为存放 PID 的文件路径,
ExecStart 为服务的具体运行命令,
ExecReload 为重启命令,
ExecStop 为停止命令,
PrivateTmp=True 表示给服务分配独立的临时空间。
[Install]部分是服务安装的相关设置,可设置为多用户的。
注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错。
YAML 语法
YMAL:YMAL Ain’t Markup Language
1 | --- |
- YAML 总是以 — (三个横杠)作为文件的开始,这是 YAML 格式的一部分;
- 普通的键值对直接以 key: value 的格式每行存储,冒号后面必须为一个空格;
- 对于列表,列表中的每个元素都以 - (一个横杠 + 一个空格)开始,且每个元素的缩进相同;
- 对于字典,字典中的每一个键值对和普通的键值对一样(其实整个文件存储的形式就是键值对),但同一个字典中每个键值对的缩进也要相同;
- 在值中含有冒号等引起解析歧义的字符时,需要用双引号将整个值包住;
- 使用 来引用变量。