shell与python判断文件是否存在,python和shell获取文

  平常运转中,大家会设有天天备份的景色,针对那大器晚成种境况可能会供给监察和控制文件是不是留存。相比较鸠拙的主意正是登录上服务器到有个别路线下查看文件是还是不是留存,除此而外,我们得以选取shell可能python来编排监察和控制文件是不是存在的脚本来减弱职业量。当然,作为三个大器晚成律是小白的自己,编写的脚本能够略显轻便,希望大神们方可教导辅导(^_^)

写 python 文件时,每一个文件最早都必需评释版本和编码。每一次自个儿 touch 文件从此今后粘贴这两句话让小编博士买驴。

第1章 ansible软件概念表达

这两日搞剧本,开支不菲光阴。

1、shell编写监察和控制文件是不是存在的剧本

由于自身尚未安装 python 的 IDE 工具,也未尝为 vim 安装相应的插件。首假如为着演练本身的编码技术,而不期望过度信任工具,所以为通晓决这一个主题材料,笔者写了这几个本子。

python语言是运营人士必会的语言,而ansible是八个基于Python开荒的自动化运营工具 (saltstack卡塔尔国。其效能完毕基于SSH远程连接服务;ansible能够兑现批量种类布署、批量软件陈设、批量文书拷贝、批量运作命令等功能

Python和Shell都足以收获文本内容,互连网海人民广播电视台湾大学资料介绍的都不现实。简单的应用Python和Shell写了本子。

  我们能够行使CRT只怕xshell等工具编写:

#!/bin/bash
if [ -n "$1" ]; then
 if [ -f "$1" ]; then
 echo $1 '文件已经存在,不能重复创建'
 else
 echo '#!/usr/bin/env python3' > $1
 echo '# -*- coding: UTF-8 -*-' >> $1
 echo $1 '文件创建成功'
 fi
else
 echo '请添加新建 Python 文件名参数'
fi

ansible软件相关参照他事他说加以考察链接音讯:

做一些笔记沉淀一下。

  以下是shell中推断文件是或不是留存,若不设有,则自动创造的法子。(当然,能用瑞典语最佳用英文写注释,本人土耳其语水准太差...)

将脚本保存在 ~/.bin 目录下,命名为 newpy 文件,然后将 ~/.bin 加多到系统情形变量中,然后就足以在命令行中输入

http://docs.ansible.com/ansible/intro_installation.html
http://www.ansible.com.cn/
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/

1、Python实现:

#!/bin/bash
#判断/export/home/wlan/AUTH这个路径下是否每天都会生成AUTH_*.xml文件
#文件名称
filename=/root/AUTH_1_1_`date  %Y%m%d`.xml
if [ ! -f $filename ];then
        touch $filename
        echo "file mk success"
else
        echo "exist"
fi
newpy test.py

1.1 软件特点概述

#-*- encoding:UTF-8 -*-
filehandler = open('f.txt','r') #以读方式打开文件,rb为二进制方式(如图片或可执行文件等)
print filehandler.read()  #读取整个文件
filehandler.close()   #关闭文件句柄

 

来创设一个自带注释的 python 脚本文件了。

01.无需单独安装客商端(no agents卡塔尔(英语:State of Qatar),基于系统自带的sshd服务,sshd就也便是ansible的客商端

2、Shell实现:

2、python编写铰孔文件是还是不是存在的台本(那几个写了多少个连串的兑现,其实都大概)

少年老成经急需越多的效果,能够不断足够这一个 shell 脚本文件。权且没悟出,就这么着啊~假若您有更加好的不二法门,请给笔者留言哦~

02.无需服务端(no servers卡塔尔(قطر‎

#!/bin/bash
#定义了要读取文件的路径
MY_FILE=/usr/loca/hrnm/switch_info 
while read MY_LINE
do
#输出读到的每一行的结果
echo $MY_LINE
done < $MY_FILE

  1)Windows上:能够运用pycharm工具,当然,前提是条件都配置好了,python情形搭建能够百度时而哈

上述那篇shell命令行,大器晚成键创立 python 模板文件脚本方法就是笔者分享给大家的全体内容了,希望能给我们一个参照,也盼望我们多都赐教脚本之家。

03.亟需依赖大批量的模块实现批量管制

以上那篇python和shell获取文本内容的格局正是小编共享给大家的全体内容了,希望能给大家多个参阅,也指望大家不吝指教脚本之家。

#判断文件是否存在,若不存在则创建
#导入模块
import os
import datetime

#文件名称
filenameHead = "C:\xxx"
filenameFoot = ".txt"
nowTime = datetime.datetime.now().strftime("%Y%m%d")

if os.path.isfile( filenameHead   nowTime   filenameFoot ):
    print("文件已存在")
else:
    file = open ( filenameHead   nowTime   filenameFoot,"w" )
    file.close ()
    print("文件已创建")

您大概感兴趣的篇章:

  • python influxdb shell编写区域互联网意况表
  • Python设置在shell脚本中自动补全功效的情势
  • python和shell监察和控制linux服务器的事必躬亲代码
  • Python下调用Linux的Shell命令的主意
  • python和shell获取文本内容的措施
  • python 实践shell命令并将结果保存的实例
  • 行使Python Java调用Shell脚本时的死锁陷阱详细解释
  • 采用Python生成Shell命令,批量实践程序代码剖析
  • python SSH模块登录,远程机推行shell命令实例深入分析
  • 用Python shell简化开拓

04.布署文件/etc/ansible/ansible.cfg(没有需求配置卡塔尔国

您恐怕感兴趣的稿子:

  • python influxdb shell编写区域网络景况表
  • Python设置在shell脚本中活动补全功效的艺术
  • python和shell监察和控制linux服务器的详尽代码
  • Python下调用Linux的Shell命令的办法
  • python 试行shell命令并将结果保存的实例
  • shell命令行,后生可畏键创造 python 模板文件脚本方法
  • 选择Python Java调用Shell脚本时的死锁陷阱详整
  • 动用Python生成Shell命令,批量实践程序代码解析
  • python SSH模块登入,远程机实行shell命令实例分析
  • 用Python shell简化开拓

  2)Linux上:相疑似行使CRT等工具,只可是文件结尾都以.py的格式,具体的能够协和完结一向下探底望

1.2 公司级临盆情况批量管理-自动化管理方案

#确认字符类型
#-*- coding:utf-8 -*- 
#导入文件用来判断文件是否存在的模块
import os  
#导入获取时间的模块            
import datetime        
#变量,获取当前时间
nowtime = datetime.datetime.now().strftime("%Y%m%d")  
#变量,定义文件所在路径 
path = "/home/tnms2/python/"
#变量,定义文件前缀                           
fileHead = "xxx"     
#变量,定义文件后缀                                  
fileFoot = ".txt"                                      

#判断文件是否存在
if os.path.isfile( path   fileHead   nowtime   fileFoot ):
        print( "The "   fileHead   nowtime   fileFoot   " exist" )
#若不存在,则创建文件
else:
         #创建文件的语法 
        file = open( path   fileHead   nowtime   fileFoot,"w" )
        file.close()
        print( "The "   fileHead   nowtime   fileFoot   " touch successed" )

01.最轻松易行/最常用/最强盛的接收是ssh key shell/pssh方案,日常中型Mini型公司会用(50-100台以下规模公司卡塔尔

上述都是足以看清文件是还是不是留存的剧本,恩,算是脚本吧,固然望着比较轻便。借使想要每一天都能收看,大家能够安装三个准期职责并将实践结果打字与印刷出来,那样每日只必要报到服务器查看打印出来的文件就能够。

a.利用ssh key实践命令,并将下令放在脚本里面

#设置定时任务
corntab -e
#每天九点自动执行脚本并且将结果追加到file_exist.log中
00 9 * * * python /export/home/wlan/file_exist.py >> /export/home/wlan/file_exist.log 

b.利用ssh key试行命令,将下令放在脚本里面,并丰硕相应循环语句或判别语句

 

02.sina cfengine/puppet较早的批量管理工具(今后多数未有商铺用卡塔尔

 

03.门户等级相比盛行的,puppet批量管理工科具(复杂/笨重卡塔尔(英语:State of Qatar)

  

04.saltstack批量管理工具;特点:轻巧,作用强盛(配置复杂卡塔尔国---中华英才网/HTC/ CDN公司

批量扣押路径:ssh key-->cfengine-->puppet-->saltstack/ansible

专心:使用ansible软件的前提是ssh key公钥分发完了

1.3 完成集群规模布局生机勃勃键配置自动化-步骤表明

01.5台服务器先布署好(kickstart,cobbler无人值班守护安装卡塔尔国,高端完结云总括(按需分配,动态调治卡塔尔国-openstack,kvm

02.linux基本优化,蕴含ssh服务(能够自动化实现卡塔尔(英语:State of Qatar)

03.创制密钥音信(自动化免人机联作创制卡塔尔(قطر‎

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1

04.张开批量散发密钥(sshpass,expect自动化完毕卡塔尔国

05.ansible软件设置(自动化落成卡塔尔(قطر‎

06.网络服务自动化安装(ansible达成卡塔尔国

搭建yum仓库,定制rpm包

第2章 ansible软件施行布署

ansible软件布置安装须要

  1. 需要有epel源

系统yum源(base epel--pip gem)

sshpass---epel

  1. ssh key免密码意况必得配备到位

2.1 ansible地址规划

服务器名称

网卡eth0

网卡eth1

用处表明

m01

10.0.0.61

172.16.1.61

批量管克制务器

nfs01

10.0.0.31

172.16.1.31

nfs分享存款和储蓄服务器

backup

10.0.0.41

172.16.1.41

rsync备份服务器

web01

10.0.0.8

172.16.1.8

web服务器

证实:一点差别也没有样表明,子网掩码均为255.255.255.0,八个C类网段254台机器规模

2.2 ①安排ssh key免密码登入方式

使用非交互作用式工具落成批量散发公钥与批量拘系服务器

 sshpass -p123456 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostChecking=no 172.16.1.41"
 sshpass -p123456 ssh -o StrictHostChecking=no root@172.16.1.41 "uptime"
 sshpass -p123456 scp -o StrictHostChecking=no /etc/hosts root@172.16.1.41:~
 <- -p:指定ssh连接用户的密码
 <- -o:StrictHostChecking=no 避免第一次登录出现公钥检查

2.3 ②受控端安装ansible相关管理软件

保留yum安装的软件

sed -i.bak 's#keepcache=0#keepcache=1#g' /etc/yum.conf 2 grep keepcache /etc/yum.conf 

顾客端配置

yum install libselinux-python -y

注明:由于初阶大家关闭了selinux安全管理软件,故这里要求操作此步骤。不装那个软件只好关闭selinux,不过无论怎么状态也绝不开启,专门的职业意况下视情状而定

2.4 ③管理端m01安装ansible软件

yum install ansible -y

2.4.1 查看版本新闻

 [root@m01 ~]# ansible --version
 ansible 2.3.2.0
 config file = /etc/ansible/ansible.cfg #告知ansible软件配置文静路径
 configured module search path = Default w/o overrides
 python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

2.4.2 查看软件相关设置新闻

[root@m01 ~]# rpm -ql ansible|egrep -v '/usr/share/|/usr/lib'
/etc/ansible
/etc/ansible/ansible.cfg #ansible配置文件
/etc/ansible/hosts  #定义ansible可以管理的主机信息
/etc/ansible/roles  #主要在自动化部署多台主机时应用
/usr/bin/ansible
/usr/bin/ansible-playbook #执行ansible剧本命令

2.4.3 软件设置目录消息

[root@m01 ~]# tree /etc/ansible/
 /etc/ansible/
 ├── ansible.cfg #ansible配置
 ├── hosts #被ansible管理的主机名单(分组)
 └── roles 

2.5 ④配置/etc/ansible/hosts文件

编写制定ansible的主机配置文件hosts,增多主机组banana

cp /etc/ansible/hosts{,.bak}
[root@m01 ~]# vim /etc/ansible/hosts #配置文件编写举例
[banana] #定义组名称
172.16.1.8
172.16.1.31
172.16.1.41
[root@m01 ~]# tail /etc/ansible/hosts

2.6 ⑤奉行测量检验

[root@m01 ~]# ansible banana -m command -a "hostname" #-m指定命令的模块 -a指定参数(action)
172.16.1.31 | SUCCESS | rc=0 >> #主机IP|请求状态|返回值(0即成功,否则失败)
nfs01       #命令输出结果
172.16.1.8 | SUCCESS | rc=0 >>
web01
172.16.1.41 | SUCCESS | rc=0 >>
backup

2.6.1 ansible命令输出音信表明

出口内容为铁红,表示实施成功,仅查询但尚无发生任何更换

输出内容为香艳,表示试行成功,但对受控主机发生了震慑,产生了配置改造

输出内容为革命:表示实践破产!!!

第3章 ansible有关语法参数计算

3.1 语法格式图示

图片 1

3.2 软件常用参数表

命令参数

参数说明

-m MODULE_NAME

相应名称的模块被执行(默认模块为command);

-m后面是模块的的名字

-a MODULE_ARGS

模块参数信息;

-a后面是要执行的命令,也可以写一个IP,针对一台机器来执行命令

-C,--check

不做任何改变;反而,只是尝试预言一些可能出现的改变

--syntax-check

执行语法检查在剧本上,但是并不执行剧本

第4章 ansible常用模块总括

大范围模块

模块表明

command(主要模块卡塔尔

执行命令模块,ansible命令试行暗中同意模块

shell(首要模块卡塔尔

实行shell脚本模块

script(首要模块卡塔尔

把脚本发到客户端然后举办;施行脚本命令在中间距服务器上

copy(重要模块卡塔尔国

把当半夏件发送到远端

file

设定文件属性模块

service

系统服务管理模块

cron

陈设任务管理模块

yum

yum软件包安装管理模块

synchronize

选拔rsync同步文件模块

mount

挂载模块

ansible协理消息种类中查阅方法:ansible-doc -l        <-查看整人体模型块列表音信

ansible-doc -s [模块]   <-查看钦命模块用法参数音信

4.1 ping模块

[root@m01 ~]# ansible banana -m ping
172.16.1.41 | SUCCESS => {
 "changed": false,
 "ping": "pong"
}
172.16.1.31 | SUCCESS => {
 "changed": false,
 "ping": "pong"
}

表达:ansible连接测量检验成功结果

ansible 172.16.1.8 -m ping
172.16.1.8 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).rn",
"unreachable": true
}

证实:ansible连接测量检验不成事结果

模块概要:

a.ping是叁个简洁明了的测量试验模块,这么些模块在中标总是时再次来到"pong"消息。在剧本中从不意思,但亦可利用ansible命令验证登入技术和用于python的安排

b.那实际不是看法的ICMP ping,而是先反省是或不是经过ssh登入节点,在检查python版本是不是知足必要,能满足要求就赶回pong

连接正常返回pong通过帮助信息可以获得:
ansible-doc -v ping 可以获得该模块的说明
ansible-doc -s file 参看模块的具体信息

实例:

[root@m01 ~]# ansible-doc -v ping
 Using /etc/ansible/ansible.cfg as config file
 > PING (/usr/lib/python2.6/site-packages/ansible/modules/system/ping.py)
 A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable python is configured. This is NOT ICMP ping, this is just a trivial test module.

4.2 command模块

常见模块

模块说明

chdir

在执行命令之前,通过cd命令进入到指定目录中

ansible banana -m command -a "chdir=/tmp ls"

create

定义一个文件是否存在,如果不存在运行相应命令;如果存在跳过此步骤

executable

改变shell使用command进行执行,并且执行时要使用绝对路径

free_form

命令模块采用自由形式命令运行;即可以输入任意linux命令

removes

定义一个文件是否存在,如果存在运行相应命令;如果不存在跳过此步骤

warn

如果ansible配置文件中定义了命令警告,如果参数设置了no/false,将不会警告此行命令

实例01.

[root@m01 ~]# ansible all -m command -a "date"
172.16.1.8 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:27 CST 2017
172.16.1.31 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:28 CST 2017
172.16.1.41 | SUCCESS | rc=0 >>
Thu Oct 19 17:12:27 CST 2017

实例02.

[root@m01 ~]# ansible banana -m command -a "chdir=/tmp pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp
172.16.1.8 | SUCCESS | rc=0 >>
/tmp
172.16.1.41 | SUCCESS | rc=0 >>
/tmp

实例03.

[root@m01 ~]# ansible banana -m command -a "pwd creates=/tmp/banana_file"
172.16.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp/banana_file exists
172.16.1.8 | SUCCESS | rc=0 >>
/root
172.16.1.41 | SUCCESS | rc=0 >>
/root

模块概要:

a.命令模块中的多个参数设置用空格实行分割

b.命令模块中不可能冒出 "<", ">", "|", ";" and "&",如需采用这一个作用,可用shell模块

提拔:command模块作为私下认可模块,在-m不内定具人体模型块时,即利用暗中同意模块command

4.3 debug模块

msg:设置打字与印刷自定义务消防队息;假使大意,则打字与印刷通用消息

[root@m01 ~]# ansible banana -m debug -a "msg=banana"
172.16.1.8 | SUCCESS => {
 "msg": "banana"
}
172.16.1.31 | SUCCESS => {
 "msg": "banana"
}
172.16.1.41 | SUCCESS => {
 "msg": "banana"
}

模块概要:那几个模块会打字与印刷语句在试行时,并且能够用于调节和测量检验变量或表明式,能够没有必要结束剧本;可以整合when指令一同开展调节和测量试验

4.4 copy模块

参数

参数说明

src

被复制到远程主机的本地文件。如果路径是一个目录,它将递归复制。如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制

remote_src

如果这个值设置为True,将到远程/目标主机的机器上搜索

dest

必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

owner

设置复制传输后的数据属主信息

group

设置复制传输后的数据属组信息

mode

设置文件数据权限信息(注意4位)

backup

在覆盖远端服务器文件之前,将远端服务器源文件备份,备份文件包含时间信息。有两个选项:yes|no

content

用于替代"src”,可以直接设定指定文件的值

force

如果目标主机包含该文件,但内容不同。

如果设置为yes,则强制覆盖;如果为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes

directory_mode

递归设定目录的权限,默认为系统默认权限

模块概要:

a.copy模块拷贝文件从本地或远程机器到长途机器的三个索引区域中;使用fetch模块来拷贝文件从远程区域到地点

b.若是供给复制文件中插入的变量值,能够利用template模块

证实:第二次实行时结果为香艳,即文件传输;第三次实行没有生出任何改造,即为绿

实例01. 采取copy 模块,将/etc/hosts文件传输到各类服务器送,权限改正为044,属主属组为banana

[root@m01 ~]# ansible banana -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=banana group=banana "
172.16.1.8 | SUCCESS => {
 "changed": true,
 "checksum": "b3c1ab140a1265cd7f6de9175a962988d93c629b",
 "dest": "/tmp/hosts",
 "gid": 500,
 "group": "banana",
 "md5sum": "8c2b120b4742a806dcfdc8cfff6b6308",
 "mode": "0600",
 "owner": "banana",
 "size": 357,
 "src": "/root/.ansible/tmp/ansible-tmp-1508410846.63-224022812989166/source",
 "state": "file",
 "uid": 500
}

实例02.活动远程主机上的公文remote_src=true参数

[root@m01 ~]# ansible banana -m copy -a "remote_src=true src=/etc/hosts dest=/opt"

172.16.1.41 | SUCCESS => {
 "changed": false,
 "checksum": "545f587595b5c60d66243fca48e052ed34eed782",
 "dest": "/opt/hosts",
 "gid": 0,
 "group": "root",
 "md5sum": "fe08440ffebed54cab7a9b4cb3c3beda",
 "mode": "0644",
 "owner": "root",
 "size": 371,
 "src": "/etc/hosts",
 "state": "file",
 "uid": 0
}

实例03.概念文件中的内容content=bananaedu.com默许未有换行

[root@m01 ~]# ansible banana -m copy -a "content=bananaedu.com dest=/opt/banana.txt"

172.16.1.31 | SUCCESS => {
 "changed": true,
 "checksum": "291694840cd9f9c464263ea9b13421d8e74b7d00",
 "dest": "/opt/banana.txt",
 "gid": 500,
 "group": "banana",
 "md5sum": "0a6bb40847793839366d0ac014616d69",
 "mode": "0600",
 "owner": "banana",
 "size": 13,
 "src": "/root/.ansible/tmp/ansible-tmp-1508649097.07-180967115147583/source",
 "state": "file",
 "uid": 500
}

4.5 shell模块

精心:shell模块在长间距实践脚本时,远程主机上自然要有相应的脚本

01.把脚本文件复制到远程服务器,施行长途服务器的脚本

[root@m01 ~]# ansible banana -m shell -a "/bin/sh /server/scripts/ssh-key.sh"
172.16.1.31 | SUCCESS | rc=0 >> 
fenfa 172.16.1.31 [ OK ]
fenfa 172.16.1.41 [ OK ] 
fenfa 172.16.1.8 [ OK ]

02.把/etc/hosts文件中的内容重定向到/banana.txt

[root@m01 ~]# ansible banana -m shell -a "cat /etc/hosts >/banana.txt"
172.16.1.41 | SUCCESS | rc=0 >>
172.16.1.8 | SUCCESS | rc=0 >>
172.16.1.31 | SUCCESS | rc=0 >>

表明:可支撑command模块不能够做到的特殊符号,同时聚集全体的模块

4.6 script模块

[root@m01 ~]# ansible banana -m script -a "/server/scripts/ip.sh"
172.16.1.8 | SUCCESS => {
 "changed": true,
 "rc": 0,
 "stderr": "Shared connection to 172.16.1.8 closed.rn",
 "stdout_lines": [
  "eth0  Link encap:Ethernet HWaddr 00:0C:29:4B:16:9D ",
  "   inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0",
  "   UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1",
  "   RX bytes:86527 (84.4 KiB) TX bytes:76532 (74.7 KiB)",
 ]
}

升迁:script模块与shell模块的界别

shell:须要将脚本文件都通晓远端服务器,然后sh实行远端服务器的脚本

script:无需将脚本文件复制到远端服务器,实质是将脚本试行进程在远端服务器上举办奉行

4.7 file模块

参数

参数表达

owner

设置复制传输后的数量属主新闻

group

设置复制传输后的数额属组新闻

mode

设置文件数量权限音信

dest

要成立的文本或目录命令,以至路线新闻

src

钦命要创造软链接的文书音讯

state

参数

参数表明

directory

享有不设有的子目录将会被创制

file

文本空头支票将无法被成立

link

标志链接(软链接卡塔尔国将被创建或转移

hard

创设出硬链接

absent

目录将被递归删除以致文件,链接被废除

留意:定义文件空中楼阁不会停业,只是输出未有生出任何改变的结果

touch

设若路线不设有将开创叁个空文件,固然文件或目录存在将接收更新的文书访谈和改换时间

实例01.创立远端目录

[root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_dir state=directory"

172.16.1.41 | SUCCESS => {
 "changed": true,
 "gid": 0,
 "group": "root",
 "mode": "0755",
 "owner": "root",
 "path": "/tmp/banana_dir",
 "size": 4096,
 "state": "directory",
 "uid": 0
}

实例02.创造远端文件

[root@m01 ~]# ansible banana -m file -a "dest=/tmp/banana_file state=touch"

172.16.1.8 | SUCCESS => {
 "changed": true,
 "dest": "/tmp/banana_file",
 "gid": 0,
 "group": "root",
 "mode": "0644",
 "owner": "root",
 "size": 0,
 "state": "file",
 "uid": 0
}

4.8 yum模块

参数

参数说明

name=name

指定安装的软件

state=installed

安装

[root@m01 ~]# ansible banana -m yum -a "name=nmap state=installed"
172.16.1.41 | SUCCESS => {
 "changed": false,
 "msg": "",
 "rc": 0,
 "results": [
  "nmap-2:5.51-6.el6.x86_64 providing nmap is already installed"
 ]
}

唤醒:这里的state状态均为过去式ed/d

4.9 service模块

参数

参数说明

name=service name

服务的名称

state=参数

停止服务 服务状态信息为过去时

stared/stoped/restarted/reloaded

enabled=yes

设置开机自启动

[root@m01 ~]# ansible banana -m service -a "name=crond state=restarted"

172.16.1.8 | SUCCESS => {
 "changed": true,
 "name": "crond",
 "state": "started"
}

申明:那时候name即服务名,表示将名称叫crond的服务甘休,何况撤消开机自运营

4.10 cron模块

实例01.开立依期职务

[root@m01 ~]# ansible banana -m cron -a "name=01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'" #name识别定时任务唯一性的标识,但只管理ansible信息

172.16.1.41 | SUCCESS => {
 "changed": true,
 "envs": [],
 "jobs": [
  "None",
  "banana666"
 ]
}

实例02.去除按期职责

[root@m01 ~]# ansible banana -m cron -a "name=None minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' state=absent"
172.16.1.41 | SUCCESS => {
 "changed": true,
 "envs": [],
 "jobs": [
  "banana666"
 ]
}

实例03.查看依期职务

[root@m01 ~]# ansible banana -m shell -a "crontab -l"
172.16.1.8 | SUCCESS | rc=0 >>
#time sync by banana at 2017-10-1
#web_backup by rsync
#*/5 * * * * /bin/sh /server/scripts/web_backup.sh &>/dev/null
#Ansible: banana666
#00 00 * * * /bin/sh /server/scripts/ip.sh &>/dev/null

4.11 fetch模块

参数

参数说明

dest

将远程主机拉取过来的文件保存在本地的路径信息

src

指定从远程主机要拉取的文件信息,只能拉取文件

flat

默认设置为no,如果设置为yes,将不显示172.16.1.8/etc/信息

实例01.从远程主机拉取文件

[root@m01 ~]# ansible banana -m fetch -a "dest=/tmp src=/etc/hosts"
172.16.1.8 | SUCCESS => {
 "changed": true,
 "checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 "dest": "/tmp/172.16.1.8/etc/hosts",
 "md5sum": "27b1ddf7c360698b439627b057f77d51",
 "remote_checksum": "bd9a0f82db17051a305f6a5974fa1fd95ead73d5",
 "remote_md5sum": null
}

实例02.拉取时不创立目录(同名文件会覆盖)

[root@m01 ~]# ansible banana -m fetch -a "dest=/tmp/ src=/etc/hosts flat=yes"

172.16.1.41 | SUCCESS => {
 "changed": true,
 "checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 "dest": "/tmp/hosts",
 "md5sum": "211bd00bf9ba8a735db1c7953d7cebc4",
 "remote_checksum": "bcb7c85bad6008ede9e73d18ae0bb78f2b11f612",
 "remote_md5sum": null
}

4.12 mount模块

参数

参数说明

fstype

指定挂载文件类型;-t nfs == fstype=nfs

opts

设定挂载的参数选项信息;-o ro == opts=ro

path

指定挂载点 path=/mnt

src

要被挂载的目录设备信息 src=172.16.1.31:/data/w

state

01.如果为mountd

在fstab文件中的设备将被激活挂载和适当配置

02.如果为unmounted

设备将被卸载并不会改变fstab文件信息,absent和present只处理fstab,但不影响目前的挂载

实例01.挂载

[root@m01 ~]#ansible banana -m mount -a “fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=mounted”
172.16.1.41 | SUCCESS => {
 "changed": true,
 "dump": "0",
 "fstab": "/etc/fstab",
 "fstype": "nfs",
 "name": "/mnt",
 "opts": "ro",
 "passno": "0",
 "src": "172.16.1.31:/data/w"
}

实例02.卸载

[root@m01 tmp]# ansible banana -m mount -a "fstype=nfs opts=ro src=172.16.1.31:/data path=/mnt state=unmounted"

 172.16.1.8 | SUCCESS => {
 "changed": false,
 "dump": "0",
 "fstab": "/etc/fstab",
 "fstype": "nfs",
 "name": "/mnt",
 "opts": "ro",
 "passno": "0",
 "src": "172.16.1.31:/data"
}

第5章 ansible剧本编写

5.1 ansible基本功知识部分补充

5.1.1 ansible软件特点

01.方可达成批量处理

02.足以达成批量布署

03.ad-hoc(批量施行命令卡塔尔---针对一时半刻的操作

ansible banana -m command -a "hostname" <-批量推行命令比如

04.编纂剧本-脚本(playbook卡塔尔(قطر‎---针对重复性的操作

5.1.2 ansible主题功用

01.pyYAML <-用于ansible编写剧本所利用的言语格式(saltstack---python)

02.paramiko <-远程连接与数量传输

03.Jinja2 <-用于编写ansible的模板新闻

5.2 ansible剧本编写法则表明

①规则一:缩进/空格

yaml使用一个原则性的缩进风格表示数据层结构关系,Saltstack须求各种缩进等第由八个空格组成,绝对不可以利用tab键

只顾:编写ansible-playbook文件,一定忘记有tab键

②规则二:冒号

CMD="echo"

yaml :

mykey :

留意:种种冒号前后必须求有空格(以冒号结尾无需空格,表示文件路线的模板无需空格)

③规则三:短横线

想要表示列表项,使用二个短横杠加三个空格。八个项应用同后生可畏的缩进品级作为同三个列表的生机勃勃局地

基本法规:有效的运用空格进行剧本的编写制定,剧本编写是不援助tab的

5.3 剧本编写处境希图

外网IP

内网IP

主机名

10.0.0.8

172.16.1.8

web01

10.0.0.31

172.16.1.31

nfs01

10.0.0.41

172.16.1.41

backup

10.0.0.61

172.16.1.61

m01

5.4 剧本书写格式

剧本的开头,可以不写
 - hosts: all  #处理所有服务器,找到所有服务器; -(空)hosts:(空)all
 tasks:  #剧本所要干的事情;          -(空)(空)task:
 - command: echo hello banana linux.
 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能
 ansible all -m command -a "echo hello banana linux"

本子编写内容扩张:剧本职分定义名称

 - hosts: 172.16.1.7  #处理指定服务器          -(空)hosts:(空)all
 task:  #剧本所要干的事情;             -(空)(空)task:
 - name:
 command: echo hello banana linux.         
 (空)(空)(空)(空)-(空)模块名称:(空)模块中对应的功能

5.4.1 剧本格式示例

[root@m01 ansible-playbook]# vim rsync_sever.yml

 - hosts: 172.16.1.41
  tasks:
   - name: install rsync
    yum: name=rsync state=installed

5.5 剧本编写后检查措施

ansible-playbook --syntax-check 01.yml  进行剧本配置信息语法检查
ansible-playbook -C 01.yml  模拟剧本执行(彩排)

5.5.1 语法检查

[root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
 playbook: 01.yml 

5.5.2 模拟剧本实施

[root@m01 ansible-playbook]# ansible-playbook -C 01.yml
PLAY [all] ***************************************************************
TASK [Gathering Facts] ***************************************************************
ok: [172.16.1.41]
ok: [172.16.1.8]
ok: [172.16.1.31]
TASK [cron] ***************************************************************
ok: [172.16.1.8]
ok: [172.16.1.41]
ok: [172.16.1.31]
PLAY RECAP ***************************************************************
172.16.1.31        : ok=2  changed=0  unreachable=0  failed=0
172.16.1.41        : ok=2  changed=0  unreachable=0  failed=0
172.16.1.8         : ok=2  changed=0  unreachable=0  failed=0

5.6 剧本示例

5.6.1 剧本编写内容增加:剧本职主要编辑写多少个职责

 - hosts: all
  tasks:
   - name: restart-network
    cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
   - name: sync time
    cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

5.6.2 剧本编写内容扩大:剧本任务编写多少个主机

 - hosts: 172.16.1.7
 tasks:
   - name: restart-network
    cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
   - name: sync time
    cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
 - hosts: 172.16.1.31
  tasks:
   - name: show ip addr to file
    shell: echo $(hostname -i) >> /tmp/ip.txt

5.7 剧本编写格局

01.多主机单职务编写方式

02.多主机多职网编写方式

03.不等主机多任务编写方式

第6章 ansible编写剧本排错思路

6.1 剧本排错方法

  1. ansible-playbook编写完,检査语法和宪章测量检验运转

2.张开剧本,定位特别问題原因,将剧本中的内容转换命令施行三次

  1. 将参数中的脚本文件推送到长途屎务器,在长间隔服务器本地执行脚本 sh -x test.sh

表明:ansible实行时,加上-vvvv彰显ansible详细推行进度,也能够一定特别原因

--syntax-check或-C ansible语法检查和宪章试行(彩排卡塔尔(قطر‎

6.2 排错逻辑

01.本子施行中的错误

02.把剧本中的内容调换为ansible命令实践

ansible banana -m yum -a "name=rsync state=installed"

03.把参数中的脚本文件推送到远端服务器,放在远端被管战胜务器本地上实践

sh -x /server/scripts/test.sh

6.3 ansible不可能平常使用

6.3.1 不足为奇难题风姿罗曼蒂克:在被控端上 root@notty进程从来存在

[root@backup ~]# ps -ef|grep sshd
 root   35274   1 0 15:25 ?    00:00:00 /usr/sbin/sshd
 root   37004 35274 0 16:23 ?    00:00:00 sshd: root@pts/2
 root   37062 35274 0 16:55 ?    00:00:00 sshd: root@notty
 root   37154 37006 0 16:55 pts/2  00:00:00 grep --color=auto sshd

消除思路:kill pid将该进度杀死,然后利用ansible的 -vvvv 参数查看实行的错误消息

Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc

META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

可能为:在/etc/ssh/sshd_config 文件中的第132表现空,招致sftp 无法连接出错

133 Subsystem    sftp  /usr/libexec/openssh/sftp-server

6.3.2 管见所及难点二:

[root@m01 ~]# ansible -k 172.16.1.51 -m ping
 SSH password:
 [WARNING]: No hosts matched, nothing to do 

竭泽而渔思路:在ansible的hosts文件中,未有配备相应主机地址新闻

6.3.3 家常便饭难点三:

# ansible -k 172.16.1.51 -m ping
SSH password:
172.16.1.51|FAILED! => {
"failed": true,
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
}

解决思路:在known_hosts文件中并未有受控端指纹音讯

6.4 [附录]pssh命令使用扩充

6.4.1 pssh命令使用景况表明

背景:若同期给上千台服务器推行二个下令,拷贝多少个文件,杀二个经过等,有如何简化运行管理的工具呢?

在Mini公司中家常便饭使用for循环,不过多少庞大时:一方面不分明操作是或不是成功;其他方面for循环语句质量倒霉估摸且是或不是是同步并行施行,故那时候会用到批量并行实施的命令如 pdsh,mussh,cssh,dsh等,及上边表明提到的pssh

6.4.2 pssh软件安装配置格局

①通过yum安装pssh软件

yum install -y pssh <-pssh软件下载需要依靠epel源

表达:pssh是两个软件好礼包,里面有多数软件命令

②透过编译格局安装pssh软件

 wget http://peak.telecommunity.com/dist/ez_setup.py
 python ez_setup.py
 wget http://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
 tar zxvf pssh-2.2.2.tar.gz
 cd pssh-2.2.2
 python setup.py install

③pssh软件应用操作说明(ssh key认证密钥配置达成卡塔尔(英语:State of Qatar)

01.pssh 多主机并行运转命令

[root@server pssh-2.2.2]# vim hosts_info.txt
 172.16.1.31:22
 172.16.1.41:22
 172.16.1.7:22 //注意我的端口号不仅是默认的22

表明:要是想将执行命令的批量出口音信重定向到多个文件 加-o 目录 选项

参数表达:

-h HOST_FILE, --hosts=HOST_FILE    hosts file (each line "[user@]host[:port]")
-o OUTDIR,   --outdir=OUTDIR     output directory for stdout files (OPTIONAL)
-P,       --print          print output as we get it

02.pscp 把公文并行地复制到多少个主机上(从劳动器端给客商端传送文件卡塔尔(قطر‎

[root@server pssh-2.2.2]# pscp -h test.txt /etc/sysconfig/network /tmp/network 

03.prsync 使用rsync切磋从本地Computer同步到长途主机

[root@server ~]# pssh -h test.txt -P mkdir /tmp/etc
[root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig /tmp/etc 

04.pslurp 将文件从远程主机复制到本地,和pscp方向相反

[root@server ~]# pslurp -h test.txt  -L /tmp/test -l root /tmp/network test 
[1] 14:53:54 [SUCCESS] 192.168.9.102 9922
[2] 14:53:54 [SUCCESS] 192.168.9.104 9922
[root@server ~]# ll /tmp/test/192.168.9.10
192.168.9.102/ 192.168.9.104/
[root@server ~]# ll /tmp/test/192.168.9.102/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test
[root@server ~]# ll /tmp/test/192.168.9.104/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test

总结

上述所述是小编给咱们介绍的ansible服务及剧本编写,希望对大家具备助于,假设大家有别的疑问请给自家留言,作者会及时恢复生机大家的。在那也特别多谢大家对台本之家网址的支持!

您大概感兴趣的篇章:

  • python将ansible配置转为json格式实例代码
  • ansible作为python模块库使用的法子实例
  • Python利用ansible分发管理任务

本文由星彩网app下载发布于星彩网app下载,转载请注明出处:shell与python判断文件是否存在,python和shell获取文

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。