Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Отключение пользователей по бездействию : Супермаг Плюс (Супермаг 2000)

20.04.2024 0:40


05.10.2019 18:32
OgyBaH
 
Повторюсь, программа запускается у пользователя, например планировщиком. Не претендую на что-то серьезное, но работает.
Вложения
Тип файла: 7z sm30.7z (6.6 Кб, 29 просмотров)
05.10.2019 18:55
OgyBaH
 
Label1 и Label2 для отладки, можно убрать. 30 - это минуты бездействия за компьютером. Проверил на virustotal.com, три антивируса ругаются, думаю на то, что убивается чужой процесс.
07.10.2019 10:36
OgyBaH
 
Цитата:
OlegON Тут нюанс в том, что если именно прибить процесс так, чтобы он нештатно завершился, то сессия еще некоторое время может болтаться. Опять же, не все очевидно с процессором отчетов, который у кого-то может и остаться. А если Супермагу штатно предложить закрыться, он выкидывает диалоговое окно.
Ключ /F не дает открыться диалоговому окну. Пусть те кто близок к серверу СуперМага проверят сессии и прочее на сервере при отработке закрытия вручную командой taskkill /F /IM Sm.Main.exe у клиента.
07.10.2019 10:47
OlegON
 
Цитата:
OgyBaH Ключ /F не дает открыться диалоговому окну
да, это нештатное прибитие... я об этом выше и говорил. а штатное - с отработкой запланированных событий закрытия программы, предусматривает появление диалогового окна.
07.10.2019 11:20
DMaslov
 
Дополню про taskkill - иногда он у меня не срабатывал.
Скачал pskill - он справляется лучше.
Но у меня задача перезапуск других модулей, сам СуперМаг не трогаю.

Код:
>pskill

PsKill v1.16 - Terminates processes on local or remote systems
Copyright (C) 1999-2016  Mark Russinovich
Sysinternals - 

Usage: pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
     -t    Kill the process and its descendants.
     -u    Specifies optional user name for login to
           remote computer.
     -p    Specifies optional password for user name. If you omit this
           you will be prompted to enter a hidden password.
     -nobanner Do not display the startup banner and copyright message.


>pskill -t Sm.Cash.Server.exe
07.10.2019 11:26
OlegON
 
Цитата:
DMaslov taskkill - иногда он у меня не срабатывал
если про кассовик речь, то он сам по себе иногда не убивается, потому там только /F и лучше несколько раз. Т.е. sc stop, taskkill /im /f, taskkill /im /f, taskkill /im /f, sc stop, taskkill /im /f, taskkill /im /f или вроде того
07.10.2019 11:56
DMaslov
 
Цитата:
OlegON только /F и лучше несколько раз
Именно. А pskill убивает с первого раза.

СервисПлюс, конечно, рекомендует обновиться, но пока не обновились, - еженощный перезапуск кассового и почтового. Проблем стало значительно меньше.
+:

Код:
D:\backup\supermag_restarts.bat
@echo off

set log=supermag_restarts.log
echo ------------- %date% %time:~0,5% ------------->> %log%

net stop Sm.Cash.Server 1>> %log% 2>>&1
ping localhost -n 120
rem taskkill.exe /IM Sm.Cash.Server.exe /F 1>> %log% 2>>&1
pskill Sm.Cash.Server.exe 1>> %log% 2>>&1
ping localhost -n 60
net start Sm.Cash.Server 1>> %log% 2>>&1

net stop Sm.Post.Server 1>> %log% 2>>&1
ping localhost -n 60
taskkill.exe /IM Sm.Post.Server.exe /F 1>> %log% 2>>&1
ping localhost -n 10
net start Sm.Post.Server 1>> %log% 2>>&1
25.12.2023 15:54
OlegON
 
Вот, накидал по быстрому вариант. Я против такого извращения, но, один из клиентов попросил.
SQL код:
CREATE OR REPLACE PROCEDURE disconnect_idle_sessions
AS
BEGIN
  
FOR s IN (SELECT s.sids.serial# FROM v$session s, supermag.sslocks l WHERE status='INACTIVE' AND prev_exec_start < SYSDATE - INTERVAL '20' MINUTE AND program = 'Sm.Main.exe' and S.SERIAL# = L.SERNUM)
  
LOOP
    BEGIN
    EXECUTE IMMEDIATE 
'ALTER SYSTEM DISCONNECT SESSION ''' || s.sid || ',' || s.serial# || ''' IMMEDIATE';
    
EXECUTE IMMEDIATE 'DELETE FROM SUPERMAG.SSLOCKS where sid=' || s.sid || ' and sernum=' || s.serial#;
    
COMMIT;
    
exception when others then null;
    
END;
  
END LOOP;
END;
/

BEGIN
  DBMS_SCHEDULER
.CREATE_JOB (
     
job_name        => 'disconnect_idle_sessions_job',
     
job_type        => 'STORED_PROCEDURE',
     
job_action      => 'disconnect_idle_sessions',
     
start_date      => SYSTIMESTAMP,
     
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
     
enabled         => TRUE);
END;
/

BEGIN
  DBMS_SCHEDULER
.SET_ATTRIBUTE (
   
name => 'disconnect_idle_sessions_job'
   
attribute => 'logging_level'
   
value => DBMS_SCHEDULER.LOGGING_OFF);
END;

Часовой пояс GMT +3, время: 00:40.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.