#RobotDaemonBugFix #RobotDaemonActivityStopFlagForceFlagCloseOnlyCurrentUser

#NeedTest
dev-linux
Ivan Maslov 5 years ago
parent bea1a402ef
commit 52416cdf47

@ -37,13 +37,15 @@ while True:
if ( if (
lActivityDateTime>=lDaemonStartDateTime and lActivityDateTime>=lDaemonStartDateTime and
lCurrentDateTime>=lActivityDateTime 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"]) 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": if lItem["activityType"]=="processStop":
#Вид активности - остановка процесса #Вид активности - остановка процесса
@ -58,8 +60,16 @@ while True:
(lItem["activityType"],lActivityDateTime,lItem["processName"]) not in lDaemonActivityLogDict): (lItem["activityType"],lActivityDateTime,lItem["processName"]) not in lDaemonActivityLogDict):
#Запись в массив отработанных активностей #Запись в массив отработанных активностей
lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processName"])]={"ActivityStartDateTime":lCurrentDateTime} 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"]) print("ProcessStop "+lItem["processName"])
#Уснуть до следующего прогона #Уснуть до следующего прогона
time.sleep(lDaemonLoopSeconds) time.sleep(lDaemonLoopSeconds)

@ -34,7 +34,11 @@
"activityType":"processStop", "activityType":"processStop",
"time":"9:20", "time":"9:20",
"timeZone":"4", "timeZone":"4",
"processName":"OpenRPARobotDaemon.exe" "processName":"OpenRPARobotDaemon.exe",
"_flagCloseForce":"Признак, что процесс нужно принудительно закрыть (если флага нет, то на процесс просто посылается команда terminate)",
"flagCloseForce":true,
"_flagCloseOnlyCurrentUser":"Признак, что процесс нужно закрыть только у текущего пользователя",
"flagCloseOnlyCurrentUser":true
} }
] ]

Loading…
Cancel
Save