日常web维护中,修改nginx.conf配置文件是很正常的事,如果你只有几台,修改完直接reload重新加载配置就可以了,但是如果你维护多台nginx服务器(50+),要全部手工操作,那估计是手敲碎的节奏,所以要尽可能用自动化脚本来完成,今天我们就来分享一个完成批量配置文件加载脚本(在前人脚本上进行了修改,使变得更结构化和易读了),脚本的实现主要利用到了paramiko模块,脚本代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/usr/bin/python import paramiko import traceback user='root' ipfile = '/root/ipfile' cmd = r''' #!/bin/sh /usr/local/nginx/sbin/nginx -t if [ $? -eq 0 ]; then /usr/local/nginx/sbin/nginx -s reload fi ''' def get_ip(): iplist = [] f = file(ipfile,'r') while True: ip = f.readline().strip() if len(ip) == 0: break else: iplist.append(ip) f.close() return iplist if __name__ == "__main__": iplist = get_ip() for ip in iplist: try: ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.connect(ip,username=user,timeout=5) print "%s" % (ip) stdin,stdout,stderr = ssh.exec_command(cmd) print stdout.read() print stderr.read() ssh.close() except: exstr=traceback.format_exc() print "[%s] : %s" % (ip.ljust(18),exstr) ssh.close() continue |
脚本解释,前几行定义了变量和要运行的命令,get_ip()函数得到要操作的ip列表,主函数中用循环在每台机器上执行cmd变量的命令,实际执行操作的命令行是stdin,stdout,stderr = ssh.exec_command(cmd),traceback是处理栈生成错误信息,这个模块会获取比较详细的异常信息,traceback.format_exc()是返回字符串形式的错误信息。