diff --git a/DeployDevice/src/func/liteOsUpgrade/liteOsUpgrade_L0_app.py b/DeployDevice/src/func/liteOsUpgrade/liteOsUpgrade_L0_app.py index f0a7398687f90f12cacea7e14a6c34f7a769a1c1..a367cac374f13b35f695eb2ca69d26e7b88b36bf 100644 --- a/DeployDevice/src/func/liteOsUpgrade/liteOsUpgrade_L0_app.py +++ b/DeployDevice/src/func/liteOsUpgrade/liteOsUpgrade_L0_app.py @@ -2,6 +2,7 @@ import uuid import sys import subprocess +import platform from core.base import BaseApp, dec_stepmsg from util.file_locker import FileLock @@ -50,18 +51,27 @@ class liteOsUpgrade_L0(BaseApp): except Exception as e: logger.error(e) raise e - + system_type = platform.system() + if system_type == "Windows": + lock_file = r'C:/deviceupgrade/task_l0.lock' + else: + lock_file = '/home/openharmony/deviceupgrade/task_l0.lock' if self.params_dict.get("isUpdate") == "False": + if not is_can_exec(lock_file): + return False + # 如果小于480秒,直接return false logger.printLog("no need upgrade board") return True # 执行升级 try: if not self.upgrade(): + delete_file_lock(lock_file) logger.printLog("%s upgrade fail") return False return True except Exception as e: + delete_file_lock(lock_file) logger.error(e) raise e @@ -220,6 +230,54 @@ class liteOsUpgrade_L0(BaseApp): finally: file_lock.releaseFile() + @timeout(1000) + def is_can_exec(lock_file): + """ + 判断升级是否可以执行 + @param lock_file: 文件路径 + """ + lock_duration = 8 * 60 # 8分钟(以秒为单位) + if os.getenv('wait_time') is not None: + lock_duration = int(os.getenv('wait_time')) + # 检查锁文件 + if os.path.exists(lock_file): + # 获取锁文件的创建时间 + lock_time = os.path.getmtime(lock_file) + current_time = time.time() + # 判断锁是否超时 + if (current_time - lock_time) < lock_duration: + logger.error("ask is already running. Exiting.") + return False + else: + logger.warning("ask running time is more than %s second, can exec" % lock_duration) + delete_file_lock(lock_file) + create_file_lock(lock_file) + return True + else: + logger.info("no tasks are being executed") + create_file_lock(lock_file) + return True + + def create_file_lock(lock_file): + """ + 创建文件锁 + @param lock_file: 文件路径 + """ + directory = os.path.dirname(lock_file) + if not os.path.exists(directory): + os.makedirs(directory) + logger.info("create_file_lock") + with open(lock_file, 'w') as f: + f.write('locked, please can not delete') + + def delete_file_lock(lock_file): + """ + 删除文件 + @param lock_file: 文件路径 + """ + logger.info("delete_file_lock") + if os.path.exists(lock_file): + os.remove(lock_file) if __name__ == "__main__": param_file = sys.argv[1]