平臺(tái)運(yùn)維日記

閱讀文檔系統(tǒng)說(shuō)明文檔授帕,發(fā)現(xiàn)精讀效果太差,建立的系統(tǒng)的信息基點(diǎn)不足浮梢□耸快速閱讀,先看目錄秕硝,然后看每篇文章的頭和尾芥映,主要關(guān)注概念與定義,不關(guān)注實(shí)現(xiàn)與功能細(xì)節(jié)远豺。閱讀完奈偏,在大腦中生成兩張圖,一張是文檔結(jié)構(gòu)圖躯护,一張是系統(tǒng)架構(gòu)圖


實(shí)踐操作惊来。操作過(guò)程主要包括:

1、把原目錄A下的文件AAA棺滞,遠(yuǎn)程傳輸?shù)街鳈C(jī)S1和S2的目錄B下裁蚁,并備份目錄B下的原文件。

2继准、繼續(xù)傳輸枉证,連續(xù)傳輸6個(gè)文件,使用File Zilla工具移必。

總耗時(shí)2個(gè)小時(shí)室谚。主要工作是:

1、檢查原目錄下的文件是否存在

2、ssh到遠(yuǎn)端檢查遠(yuǎn)程目錄是否存在秒赤,遠(yuǎn)程目錄文件是否存在猪瞬,備份遠(yuǎn)程目錄文件。6次檢查入篮,每次兩臺(tái)主機(jī)陈瘦,總共檢查12次

3、使用ftp工具上傳文件崎弃,上傳時(shí)設(shè)定本機(jī)目錄,設(shè)定遠(yuǎn)端目錄含潘,點(diǎn)擊上傳饲做。完全手工操作,容易出錯(cuò)遏弱。

4盆均、文件上傳之后,ssh到遠(yuǎn)程檢查文件是否是最新漱逸。相當(dāng)于重復(fù)步驟2

5泪姨、ssh遠(yuǎn)程主機(jī),在各個(gè)目錄下分別執(zhí)行kill和start命令饰抒,kill前檢查進(jìn)程是否存在肮砾,start后檢查是否啟動(dòng)完成,又是12次操作袋坑。


自動(dòng)化分析:

功能操作分解:本機(jī)檢查文件存在以及最新仗处,遠(yuǎn)程檢查目錄是否存在,遠(yuǎn)程備份文件枣宫,上傳文件婆誓,確認(rèn)遠(yuǎn)端文件正確上傳,確認(rèn)進(jìn)程是否存在也颤,停止進(jìn)程洋幻,啟動(dòng)進(jìn)程


編碼功能:

由于python豐富的運(yùn)維庫(kù),采用python語(yǔ)言來(lái)實(shí)現(xiàn)翅娶。采用paramiko實(shí)現(xiàn)

文件格式:

caltest.war,d:\pkg\version,/app/bjmbill/user,username,password,192.168.1.1

代碼如下:

import paramiko

import os

import time

import logging

date = time.strftime("%Y%m%d")

file_name ="oper_log_%s.log"%date

print(file_name)

logging.basicConfig(filename=file_name,

level=logging.DEBUG,filemode='w' ,

datefmt='%Y-%m-%d %H:%M:%S',

format? ='%(asctime)s? %(filename)s : %(levelname)s? %(message)s',

)

logger = logging.getLogger(__name__)

# 從文件中讀取文件名,本地目錄,遠(yuǎn)程目錄,用戶名

# caltest.war , d:\pkg\version\ , /home/emer/toma/, emer

def get_file_info(file_name):

result = {}

with open(file_name) as f:

for (num, value) in enumerate(f):

#? ? ? ? ? ? value = value.strip()

? ? ? ? ? ? if not len(value):

continue

? ? ? ? ? ? result[num] = {'file_name': value.split(',')[0],'local_dir': value.split(',')[1],

'remote_dir': value.split(',')[2],'user_name': value.split(',')[3],

'password': value.split(',')[4],'ip': value.split(',')[5]

}

f.close()

? ? logger.info("打印文件內(nèi)容%s"%result)

? ? return result

# 遠(yuǎn)程操作類,在遠(yuǎn)程主機(jī)上的動(dòng)作

class RemoteOper(object):

# 根據(jù)協(xié)議選擇不同的連接方式,返回連接本身

# def 登錄遠(yuǎn)端(協(xié)議方法,用戶名,密碼,端口號(hào),密鑰串)

? ? def loginRomote(self, protocol_method, host_info):

ip,user_name,password,port,remote_file = host_info[0], host_info[1], host_info[2], host_info[3], host_info[

4]

if protocol_method =="SSH":

paramiko.util.log_to_file('sysLogin.txt')

? ? ? ? ? ? ssh = paramiko.SSHClient()

? ? ? ? ? ? ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

? ? ? ? ? ? ssh.connect(hostname="IP",username="user_name",password="password",key_filename="key_filename")

? ? ? ? ? ? return ssh

if protocol_method =="FTP":

t = paramiko.Transport("IP")

? ? ? ? ? ? t.connect(user_name="",password="")

? ? ? ? ? ? sftp = paramiko.SFTPClient.from_transport(t)

? ? ? ? ? ? return sftp

# def 執(zhí)行命令,exec_command(command),由于本機(jī)與遠(yuǎn)程執(zhí)行方法一樣,不單獨(dú)列出

# def 檢查文件是否存在(文件名),返回最新日期和屬性

? ? def checkFile(self, loginRomote, file_name):

file_info = loginRomote.exec_command("ls -l %s"%file_name)

? ? ? ? logger.info(file_info)

? ? # def 備份文件,返回備份后的文件屬性

? ? def backFile(self, host_info, file_name):

ip, user_name, password, port, remote_file = host_info[0], host_info[1], host_info[2], host_info[3], host_info[

4]

logger.info('待備份文件%s'%file_name)

? ? ? ? try:

ssh = paramiko.SSHClient()

? ? ? ? ? ? ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

? ? ? ? ? ? ssh.connect(hostname=ip,username=user_name,password=password)

? ? ? ? ? ? time_bak = time.strftime("%m%d")

? ? ? ? ? ? command1 ="cp -p -r %s %s" %(file_name, file_name +'_' + time_bak)

? ? ? ? ? ? logger.info("準(zhǔn)備開始執(zhí)行命令%s" % command1)

? ? ? ? ? ? stdin, stdout, stderr = ssh.exec_command(command1)

? ? ? ? ? ? logger.info(stdout.read())

? ? ? ? ? ? command2 ="ls -l %s" %(file_name +'*')

? ? ? ? ? ? logger.info("準(zhǔn)備開始執(zhí)行命令%s" % command2)

? ? ? ? ? ? stdin, stdout, stderr = ssh.exec_command(command2)

? ? ? ? ? ? logger.info(stdout.read())

? ? ? ? ? ? ssh.close()

? ? ? ? ? ? return 0

? ? ? ? except Exception as e:

ssh.close()

? ? ? ? ? ? logger.info("文件備份失敗失敗username=%s,password=%s,ip=%s,port=%s,file_name=%s,remote_dir=%s",

user_name, password, ip, port, file_name, remote_dir)

? ? ? ? ? ? return -1

? ? # def 檢查進(jìn)程存在(進(jìn)程名文留,數(shù)量)

? ? def checkProcess(self, loginRemote, process_name, num):

pro_num = loginRemote.exec_command("ps -ef|grep %s |wc -l"%process_name)

? ? ? ? if pro_num == num:

logger.info("進(jìn)程%s數(shù)量正常,為%s"%(process_name, pro_num))

? ? ? ? else:

logger.info("進(jìn)程%s數(shù)量異常,應(yīng)為%s,為%s"%(process_name, num, pro_num))

# 本地操作類,主要是檢查本地文件,與上傳

class LocalOper(object):

def listAllFile(self, dir_name):

def processDir(self, dir_name, file_names):

logger.info('Director', dir_name)

? ? ? ? ? ? for file_namein file_names:

logger.info("FIle", file_name)

? ? ? ? os.walk(dir_name, processDir,None)

? ? # def 檢查本地文件(文件名)

? ? def isFile(self, file_name):

if os.path.isfile(file_name):

logger.info("%s文件存在"%file_name)

? ? ? ? else:

logger.info("%s文件不存在"%file_name)

? ? ? ? # def 文件上傳

? ? def upFile(self, host_info, file_name):

ip,user_name,password,port,remote_file = host_info[0],host_info[1],host_info[2],host_info[3],host_info[4]

try:

t = paramiko.Transport(ip,port)

? ? ? ? ? ? t.connect(username=user_name,password=password)

? ? ? ? ? ? sftp = paramiko.SFTPClient.from_transport(t)

? ? ? ? ? ? sftp.put(file_name,remote_file)

? ? ? ? ? ? logger.info("文件上傳成功username=%s,password=%s,ip=%s,port=%s,file_name=%s,remote_dir=%s",

user_name, password, ip, port, file_name, remote_dir)

? ? ? ? ? ? logger.info(sftp.stat(remote_file))

? ? ? ? ? ? t.close()

? ? ? ? ? ? return 0

? ? ? ? except Exception as e:

t.close()

? ? ? ? ? ? logger.info("文件上傳失敗username=%s,password=%s,ip=%s,port=%s,file_name=%s,remote_dir=%s",

user_name, password, ip, port, file_name, remote_dir)

? ? ? ? ? ? return -1

? ? # 返回最新日期和屬性

if __name__ =='__main__':

#生成日志文件

? ? date = time.strftime("%Y%M%D")

? ? log_file_name ="oper_log_%s.log"%date

logging.basicConfig(filename=log_file_name,level=logging.DEBUG)

? ? fileInfo = get_file_info("testdeploy.txt")

? ? #文件格式內(nèi)容:caltest.war , d:\pkg\version\ , /home/emer/toma/, emer,192.168.1.1

# file_name local_dir remote_dir user_name? ip

#單文件調(diào)試

#文件上傳

? ? localOper = LocalOper();

key =0

? ? local_file_name = os.path.join(fileInfo[key]['local_dir'], fileInfo[key]['file_name']).strip(' ')

? ? file_name = fileInfo[key]['file_name']

local_dir = fileInfo[key]['local_dir']

remote_dir = fileInfo[key]['remote_dir']

user_name = fileInfo[key]['user_name']

password = fileInfo[key]['password']

ip = fileInfo[key]['ip'].strip()

? ? remote_file_name = remote_dir +'/' + file_name

logger.debug("列出當(dāng)前目錄下本地文件%s" %(fileInfo[key]['local_dir']))

? ? localOper.listAllFile(local_dir)

? ? logger.debug("檢查本地文件%s" % local_file_name)

? ? localOper.isFile(local_file_name)

? ? #ip, user_name, password, port, remote_dir,用戶名和密碼信息從文件中讀取

? ? host_info =[ip,user_name,password,22,remote_file_name]

#備份文件

? ? remoteOper = RemoteOper()

? ? if remoteOper.backFile(host_info,remote_file_name) !=0:

logger.error("文件備份失敗")

? ? #上傳文件

? ? if localOper.upFile(host_info, local_file_name) !=0:

logger.error("文件上傳失敗")

? ? # 讀取文件竭沫,文件名厂庇,本地目錄,上傳目錄输吏,上傳用戶名(考慮自動(dòng)獲取叭酢)

# for 循環(huán)

#? 檢查本地文件

#? 登錄遠(yuǎn)端

#? 檢查遠(yuǎn)端文件

#? 備份文件

#? 上傳文件

#? 比對(duì)文件

#

# 讀取文件,獲取進(jìn)程名

# 檢查進(jìn)程,停進(jìn)程拄氯,啟動(dòng)進(jìn)程躲查,檢查進(jìn)程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市译柏,隨后出現(xiàn)的幾起案子镣煮,更是在濱河造成了極大的恐慌,老刑警劉巖鄙麦,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件典唇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胯府,警方通過(guò)查閱死者的電腦和手機(jī)介衔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)骂因,“玉大人炎咖,你說(shuō)我怎么就攤上這事『ǎ” “怎么了乘盼?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)俄烁。 經(jīng)常有香客問(wèn)我绸栅,道長(zhǎng),這世上最難降的妖魔是什么页屠? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任阴幌,我火速辦了婚禮,結(jié)果婚禮上卷中,老公的妹妹穿的比我還像新娘矛双。我一直安慰自己,他們只是感情好蟆豫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布议忽。 她就那樣靜靜地躺著,像睡著了一般十减。 火紅的嫁衣襯著肌膚如雪栈幸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天帮辟,我揣著相機(jī)與錄音速址,去河邊找鬼。 笑死由驹,一個(gè)胖子當(dāng)著我的面吹牛芍锚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼并炮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼默刚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逃魄,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荤西,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后伍俘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邪锌,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年癌瘾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了觅丰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柳弄,死狀恐怖舶胀,靈堂內(nèi)的尸體忽然破棺而出概说,到底是詐尸還是另有隱情碧注,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布糖赔,位于F島的核電站萍丐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏放典。R本人自食惡果不足惜逝变,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奋构。 院中可真熱鬧壳影,春花似錦、人聲如沸弥臼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)径缅。三九已至掺栅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纳猪,已是汗流浹背氧卧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氏堤,地道東北人沙绝。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宿饱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熏瞄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,135評(píng)論 2 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)谬以,斷路器强饮,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 部分內(nèi)容轉(zhuǎn)載自搜狗百科 cmd是command的縮寫.即命令提示符(CMD),是在OS / 2 为黎, Windows...
    青冥之上閱讀 2,387評(píng)論 0 24
  • win7 cmd管理員權(quán)限設(shè)置 net localgroup administrators 用戶名 /add 把“...
    f675b1a02698閱讀 5,135評(píng)論 0 11
  • 品牌顧客分類: 一邮丰、沒有用過(guò)本品牌 ①?zèng)]有用過(guò)沒有聽說(shuō)過(guò),路過(guò)了解一下 ②沒有用過(guò)聽說(shuō)過(guò)铭乾,慕名而來(lái) ③沒有用過(guò)聽說(shuō)...
    暖熙1988閱讀 221評(píng)論 0 0