実用的な運用・保守スクリプト

免責事項:この記事は従って、ブロガーオリジナル記事です。CC BY-SA 4.0再現著作権の契約を、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/u014589856/article/details/96438081

最近、クラスタは、我々は、クラスタ管理を支援するためにいくつかの有用なスクリプトを開発する予定で、一部の保守作業を行います。

1、複数のマシンのハンドリングとファイルコピー

遠隔操作や一括コピーベースsshpassモジュール、スクリプトを実行しているマシン上でオフラインまたはオンラインモードのインストールsshpassコマンドに依存する前駆物質(使用するPython2とデフォルトモジュールは、CentOSのシステムに統合持っているようだ)、クラスタがありますわずかに異なる変更が一元管理を実現するために、ユーザーアカウントとパスワードを指定することができない均一な場合は、すべてのノードのためのパスワードは、統一します。

次のようにsshUtil.pyを読み取ります。

#! /usr/bin/python
# -*- coding:UTF-8 -*-
import os
import sys
import commands
import datetime
import re
import argparse
class Run(object):
        def __init__(self,user,host,password):
                self.__host=host
                self.__password=password
                self.__user=user
        def sshdo(self, cmd):
                cmd = "sshpass -p'%s' ssh -o 'StrictHostKeyChecking=no' %s@%s '%s'" %(self.__password,self.__user,self.__host, cmd)
                if os.system(cmd)!=0:
                        print("[err]: "+cmd)
        def sshcopy(self, srcfile, destfile):
                cmd = "sshpass -p'%s' scp -r %s %s@%s:%s" % (self.__password, srcfile, self.__user, self.__host, destfile)
                (status, output) = commands.getstatusoutput(cmd)
                print("[status]"+str(status))
                return status
def runHosts(args):
        showArgs(args)
        user = "root"
        password = "root"
        for line in open(args.f):
                line=line.replace("\n", "").replace("\r", "").strip()
                if not line.startswith("192"):
                        continue
                host = re.split(" |\t",line)[-1]
                print("-----["+host+"]------")
                run = Run(user,host,password)
                if args.cmd=="run":
                        run.sshdo(args.c)
                elif args.cmd=="cp":
                        run.sshcopy(args.s, args.d)
                elif args.cmd=="chage_passwd_time":
                        #通过修改密码过期时间,做到密码防止过期(用于不能修改密码过期策略的集群)
                        run.sshdo("chage -d %s %s" %(datetime.datetime.today().strftime('%Y-%m-%d'),user))
                        run.sshdo("chage -l  %s| head -n 1" %(user))
                else:
                        print("error cmd!!!!!")
def showArgs(args):
        if args.cmd=="run":
                print("[cmd]run:"+args.c)
        elif args.cmd=="cp":
                print("[cmd]cp:"+args.s +" to "+args.d)
        elif args.cmd=="chage_passwd_time":
                print("[cmd]chage_passwd_time")
        else:
                print("error cmd!!!!!")
if __name__ == "__main__" :
        parser = argparse.ArgumentParser(description='run or cp for each node.')
        parser.add_argument('cmd',type=str,help='run cmd[run/cp/chage_passwd_time]')
        parser.add_argument('-s',type=str,help='srcFile [cp]')
        parser.add_argument('-d',type=str,help='destPath [cp]')
        parser.add_argument('-c',type=str,help='cmd  [run]')
        parser.add_argument('-f',type=str,help='hosts file',default='/etc/hosts')
        args = parser.parse_args()
        print("[begin]...............")
        runHosts(args)
        print("[finish]!!!!!!!!!!!!!!")

あなたはまた、-fが使用する設定ファイルのパスを指定することができ、次のデモを使用します

[root@n101 python]# python sshUtil.py --help
usage: sshUtil.py [-h] [-s S] [-d D] [-c C] [-f F] cmd

run or cp for each node.

positional arguments:
  cmd         run cmd[run/cp/chage_passwd_time]

optional arguments:
  -h, --help  show this help message and exit
  -s S        srcFile [cp]
  -d D        destPath [cp]
  -c C        cmd [run]
  -f F        hosts file
[root@n101 python]# python sshUtil.py cp -s /root/shell/python/test -d /root
[begin]...............
[cmd]cp:/root/shell/python/test to /root
-----[n101]------
[status]0
-----[n102]------
[status]0
-----[n103]------
[status]0
[finish]!!!!!!!!!!!!!!
[root@n101 python]# python sshUtil.py run -c "ls -l /root"
[begin]...............
[cmd]run:ls -l /root
-----[n101]------
总用量 171364
-rw-------.  1 root root      1231 6月  16 09:43 anaconda-ks.cfg
drwxr-xr-x.  3 root root       134 7月   9 23:09 shell
drwxr-xr-x.  2 root root        15 7月  18 17:07 test
-----[n102]------
总用量 4
-rw-------. 1 root root 1231 6月  16 09:43 anaconda-ks.cfg
drwxr-xr-x. 2 root root   15 7月  18 17:07 test
-----[n103]------
总用量 4
-rw-------. 1 root root 1231 6月  16 09:43 anaconda-ks.cfg
drwxr-xr-x. 2 root root   15 7月  18 17:07 test
[finish]!!!!!!!!!!!!!!
[root@n101 python]# python sshUtil.py chage_passwd_time
[begin]...............
[cmd]chage_passwd_time
-----[n101]------
最近一次密码修改时间                                    :7月 18, 2019
-----[n102]------
最近一次密码修改时间                                    :7月 18, 2019
-----[n103]------
最近一次密码修改时间                                    :7月 18, 2019
[finish]!!!!!!!!!!!!!!

 

おすすめ

転載: blog.csdn.net/u014589856/article/details/96438081