breakdown_rolling_update.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import psutil
  2. import time
  3. from loguru import logger
  4. if __name__ == '__main__':
  5. import argparse
  6. parser = argparse.ArgumentParser(description='config for rolling update process')
  7. parser.add_argument('--wait_time', type=int, default=60, help='wait time after rolling update started')
  8. args = parser.parse_args()
  9. wait_time = args.wait_time
  10. logger.info("start to watch rolling update process")
  11. start_time = time.time()
  12. end_time = time.time()
  13. flag = True
  14. while flag and end_time - start_time < 360:
  15. process_list = [p.info for p in psutil.process_iter(attrs=['pid', 'name','cmdline'])]
  16. for process in process_list:
  17. if isinstance(process.get("cmdline", []), list):
  18. if "rollingUpdate.sh" in process.get("cmdline", []):
  19. logger.info(f"rolling update process: {process} started")
  20. flag = False
  21. break
  22. time.sleep(0.5)
  23. end_time = time.time()
  24. if flag:
  25. logger.info(f"rolling update process not found, wait for {end_time - start_time} seconds")
  26. logger.info(f"wait {wait_time}s to kill rolling update process")
  27. time.sleep(wait_time)
  28. logger.info("start to kill rolling update process")
  29. try:
  30. p = psutil.Process(process["pid"])
  31. p.terminate()
  32. logger.info(f"rolling update process: {process} killed")
  33. except Exception as e:
  34. logger.error(f"rolling update process: {process} kill failed, {e}")