国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

利用Python實現自動化監控文件夾完成服務部署

89542767 / 501人閱讀

  小編寫這篇文章的一個主要目的,主要是來給大家做一個介紹,介紹的內容是關于Python的,比如說,利用Python實現自動化監控文件,并把這些文件部署在服務器上面,具體的部署過程,下面給大家做個解答。


  大家好,我是安果!


  最近在部署前端項目的時候,需要先將前端項目壓縮包通過堡壘機上傳到應用服務器的/tmp目錄下,然后進入應用服務器中,使用mv命令將壓縮文件移動到Nginx項目設定目錄,最后使用unzip命令解壓文件,以此完成項目的部署


  仔細分析,大部分操作都是重復性的動作,人工去完成這些操作會大大降低工作效率


  本篇文章將介紹如何利用Python監控文件夾,以此輔助完成服務的部署動作


  1.準備


  這里要介紹一個Python依賴庫「watchdog」


  它可用于監控某個文件目錄下的文件變化,包含:刪除、修改、新增等操,每一個操作都會回調一個事件函數,我們可以在內部編寫自定義的邏輯,以此滿足我們的需求


  #安裝依賴包
  pip3 install watchdog


  2.實戰一下


  首先,我們需要創建一個監聽器,用于監聽文件夾目錄


  from watchdog.observers import Observer
  ...
  #創建一個監聽器,用來監聽文件夾目錄
  observer=Observer()
  ...


  然后,創建2個事件處理對象


  PS:該對象繼承于「FileSystemEventHandler」類


  它們分別用于監聽「/tmp」目錄、「/home/project/frontend」目錄,假設事件對象被命名為obj1、obj2


  obj1負責監聽/tmp目錄,重寫「新建或修改」事件方法,完成壓縮文件的移動操作


  from watchdog.events import*
  import ntpath
  import shutil
  import zipfile
  def get_filename(filepath):
  """
  根據文件夾目錄,獲取文件名稱(待后綴)
  :param filepath:
  :return:
  """
  return ntpath.basename(filepath)
  class FileMoveHandler(FileSystemEventHandler):
  def __init__(self):
  FileSystemEventHandler.__init__(self)
  ...
  #文件新建
  def on_created(self,event):
  #新建文件夾
  if event.is_directory:
  #print("directory created:{0}".format(event.src_path))
  pass
  #新建文件
  else:
  #print("file created:{0}".format(event.src_path))
  filename=get_filename(event.src_path)
  #如果屬于前端的4個項目壓縮包,開始文件夾的操作
  if filename in watch_tags:
  self.start(filename)
  ...
  def on_modified(self,event):
  if event.is_directory:
  #print("directory modified:{0}".format(event.src_path))
  pass
  else:
  #print("file modified:{0}".format(event.src_path))
  filename=get_filename(event.src_path)
  if filename in watch_tags:
  self.start(filename)
  ...
  def start(self,filename):
  """


  文件處理邏輯


  :param filename:
  :return:
  """
  try:
  #文件名不帶后綴
  filename_without_suffix=filename.split(".")[0]
  #源文件路徑(壓縮包文件)
  source_file_path=watch_folder+filename
  #目標文件路徑(壓縮包文件)
  target_file_path=target_folder+filename
  #目標項目文件夾(目標項目)
  target_project_path=target_folder+filename_without_suffix
  #1、復制文件到目標文件夾
  print(f"拷貝源目錄{source_file_path},目標文件夾:{target_folder}")
  #刪除目標文件夾下的壓縮文件
  if os.path.exists(target_file_path):
  os.remove(target_file_path)
  #移動文件到目標文件夾中
  shutil.move(source_file_path,target_folder)
  #2、清空目標文件夾中內的所有文件夾(如果存在)
  #如果不存在,新建一個文件夾
  if os.path.exists(target_project_path):
  shutil.rmtree(target_project_path,ignore_errors=True)
  print(f"項目{filename_without_suffix}移動成功!")
  except Exception as e:
  print("部署失敗,錯誤原因:",str(e.args))


  obj2負責監聽/home/project/frontend目錄,同樣重寫「新建或修改」事件方法,完成壓縮文件的解壓動作


  ...
  def start(self,filename):
  #文件名不帶后綴
  filename_without_suffix=filename.split(".")[0]
  #目標文件路徑(壓縮包文件)
  target_file_path=target_folder+filename
  #目標項目文件夾(目標項目)
  target_project_path=target_folder+filename_without_suffix
  r=zipfile.is_zipfile(target_file_path)
  if r:
  fz=zipfile.ZipFile(target_file_path,'r')
  for file in fz.namelist():
  fz.extract(file,target_folder)
  else:
  print('這不是一個正常的zip壓縮包!')
  ...


  接著,通過監聽器啟動上面兩個事件的監聽任務


  import time
  ...
  if __name__=="__main__":
  #待監聽的文件夾目錄
  watch_folder="/tmp/"
  #項目目標文件夾目錄
  target_folder="/home/project/frontend/"
  #監聽文件夾名稱,即:項目壓縮包名稱
  watch_tags=['proj1.zip','proj2.zip','proj3.zip','proj4.zip']
  #創建一個監聽器,用來監聽文件夾目錄
  observer=Observer()
  #創建兩個事件處理對象
  move_handler=FileMoveHandler()
  unzip_handler=FileUnzipHandler()
  #啟動監控任務
  #參數分別是:觀察者、監聽目錄、是否監聽子目錄
  observer.schedule(move_handler,watch_folder,True)
  observer.schedule(unzip_handler,target_folder,True)
  observer.start()
  try:
  while True:
  time.sleep(1)
  except KeyboardInterrupt:
  observer.stop()
  observer.join()
  ...
  最后,我們在服務器上通過「nohup」命令,讓文件監聽程序在后臺運行即可
  #在后臺運行
  #項目文件:watch_folder.py
  #日志文件:watch_folder.log
  nohup python3-u watch_folder.py>watch_folder.log 2>&1&


  #查看日志:
  cat watch_folder.log


  3.總結


  通過上面的操作,每次我通過堡壘機將前端zip壓縮項目文件上傳到應用服務器的/tmp目錄下,程序會自動進行后面的操作,自動完成應用部署


  綜上所述,這篇文章就給大家介紹完畢了,希望可以給大家帶來幫助。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128358.html

相關文章

  • 到底什么是TAE

    摘要:回滾部署開發者每次部署的程序包會自動備份到歷史版本,發布異常時,可以指定回滾部署到某一歷史版本。網絡方面采用了硬件防火墻設施,提供四層到七層的全面防護,防護類型包括等所有攻擊方式,支持清洗和黑洞機制,還接入了防護等功能。 TAE2.0(Taobao App Engine)是針對移動互聯網場景的定制化PaaS云服務,基于阿里云基礎設施,采用Docker容器技術封裝應用運行環境,并且針對互...

    novo 評論0 收藏0
  • 到底什么是TAE

    摘要:回滾部署開發者每次部署的程序包會自動備份到歷史版本,發布異常時,可以指定回滾部署到某一歷史版本。網絡方面采用了硬件防火墻設施,提供四層到七層的全面防護,防護類型包括等所有攻擊方式,支持清洗和黑洞機制,還接入了防護等功能。 TAE2.0(Taobao App Engine)是針對移動互聯網場景的定制化PaaS云服務,基于阿里云基礎設施,采用Docker容器技術封裝應用運行環境,并且針對互...

    yankeys 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<