From 52416cdf47d04b133ad2d5e0533c37bad042bb85 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Tue, 16 Apr 2019 09:42:37 +0300 Subject: [PATCH] #RobotDaemonBugFix #RobotDaemonActivityStopFlagForceFlagCloseOnlyCurrentUser #NeedTest --- Orchestrator/RobotDaemon/robotDaemon.py | 18 ++++++++++++++---- .../RobotDaemon/robotDaemonConfiguration.json | 6 +++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Orchestrator/RobotDaemon/robotDaemon.py b/Orchestrator/RobotDaemon/robotDaemon.py index f123618d..48cbf03c 100644 --- a/Orchestrator/RobotDaemon/robotDaemon.py +++ b/Orchestrator/RobotDaemon/robotDaemon.py @@ -37,13 +37,15 @@ while True: if ( lActivityDateTime>=lDaemonStartDateTime and lCurrentDateTime>=lActivityDateTime and - (lItem["activityType"],lActivityDateTime,lItem["processPath"],lItem["processArgs"]) not in lDaemonActivityLogDict): + (lItem["activityType"],lActivityDateTime,lItem["processPath"]) not in lDaemonActivityLogDict): #Выполнить операцию print("ProcessStart:"+lItem["processPath"]) #Запись в массив отработанных активностей - lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processPath"],lItem["processArgs"])]={"ActivityStartDateTime":lCurrentDateTime} + lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processPath"])]={"ActivityStartDateTime":lCurrentDateTime} #Запустить процесс - subprocess.Popen([lItem["processPath"],lItem["processArgs"]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + lItemArgs=[lItem["processPath"]] + lItemArgs.extend(lItem["processArgs"]) + subprocess.Popen(lItemArgs,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #Определить вид активности if lItem["activityType"]=="processStop": #Вид активности - остановка процесса @@ -58,8 +60,16 @@ while True: (lItem["activityType"],lActivityDateTime,lItem["processName"]) not in lDaemonActivityLogDict): #Запись в массив отработанных активностей lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processName"])]={"ActivityStartDateTime":lCurrentDateTime} + #Сформировать команду на завершение + lActivityCloseCommand='taskkill /im '+lItem["processName"]' + #TODO Сделать безопасную обработку,если параметра нет в конфигурации + if lItem['flagCloseForce']: + lActivityCloseCommand+=" /F" + #Завершить процессы только текущего пользоваиеля + if lItem['flagCloseOnlyCurrentUser']: + lActivityCloseCommand+=' /fi "username eq %username%"' #Завершить процесс - os.system('taskkill /f /im '+lItem["processName"]) + os.system(lActivityCloseCommand) print("ProcessStop "+lItem["processName"]) #Уснуть до следующего прогона time.sleep(lDaemonLoopSeconds) diff --git a/Orchestrator/RobotDaemon/robotDaemonConfiguration.json b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json index 902fdc52..eb5625a0 100644 --- a/Orchestrator/RobotDaemon/robotDaemonConfiguration.json +++ b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json @@ -34,7 +34,11 @@ "activityType":"processStop", "time":"9:20", "timeZone":"4", - "processName":"OpenRPARobotDaemon.exe" + "processName":"OpenRPARobotDaemon.exe", + "_flagCloseForce":"Признак, что процесс нужно принудительно закрыть (если флага нет, то на процесс просто посылается команда terminate)", + "flagCloseForce":true, + "_flagCloseOnlyCurrentUser":"Признак, что процесс нужно закрыть только у текущего пользователя", + "flagCloseOnlyCurrentUser":true } ]