<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Вещь жутко плезная. Но как всегда есть пожелание:
Предусмотреть режим, чтобы при запуске (по расписанию к примеру) вырубались все терминальные сессии независимо от статуса. Сама же приблуда при этом будет вызыватся с консоли — так что терминалки можно глушить и не оглядыватся…
Хорошая весчь.
Особенно название понравилось 😉
По просьбам:
LogoffAll.exe – просто убивает ВСЕ терминальные сессии и сама выключается.
На название я сразу обратил внимание — и главное, что полностью соответствует функционалу…
Спасибо за доработку.
🙂
предлагаю еще замутить Цензура.exe,чотб заменяла(переименовывала) все подозрительные названия антонимами!!!!
а Абадонне нужно назначить кого-нибудь замом для пополнения словаря! 😉
До чего испорченный народ!
Nah = New Abadonna Hit 🙂
ну до чего же дисциплинирована,однако! дважды прочла «Вы уже оценивали эту разработку!»
Оч хорошо! А Цитриковские сессии убивает -никто не пробовал? А то на живых людях страшно… :)))
Красивше LogOffAll.exe заменить на LogNah.exe с параметром -NahAll. 🙂
>Красивше LogOffAll.exe заменить на LogNah.exe с параметром -NahAll. 🙂
Надо было второй назвать LogVP 😉
Супер! +1
Запустил прогу. Она не видит ни одну сессию. 🙁
>Запустил прогу. Она не видит ни одну сессию. 🙁
Что могу сказать? У меня на Win2003 пошла с ходу и до сих про трудится…
На разные варианты я не проверял.
Мои комменты кто-то потер.
Тоже самое не работают обе программы.
Стоит Win2k3 r2 Standart sp1, сессий не видит
(16,14) Давай для начала проверим такую вещь, запустите батник с текстом
query session > C:session.txt
Если на диске С появится файл session.txt — бум проверять дальше, не появится — не судьба
Я уже сделал тоже самое через батник с командой
taskkill /f /im 1cv7.exe /t >E:BaseExtFormsExit1cKill.txt
1cKill.txt — туда пишется лог, это если кому надо )
СЕАНС ПОЛЬЗОВАТЕЛЬ ID СТАТУС ТИП УСТР-ВО
rdp-tcp 65536 Прием rdpwd
rdp-tcp#118 Улитина 2 Активно rdpwd
rdp-tcp#86 Улитина 3 Активно rdpwd
rdp-tcp#103 Жукова 1 Активно rdpwd
rdp-tcp#105 Семячков 6 Активно rdpwd
rdp-tcp#106 Недавняя 7 Активно rdpwd
Денисов 8 Диск rdpwd
rdp-tcp#101 Воронина 9 Активно rdpwd
rdp-tcp#120 лапшина 12 Активно rdpwd
rdp-tcp#48 Уляшева 13 Активно rdpwd
rdp-tcp#128 Удоратин 14 Активно rdpwd
rdp-tcp#85 оператортц3 16 Активно rdpwd
rdp-tcp#91 Кудинова 20 Активно rdpwd
rdp-tcp#119 Турьев 19 Активно rdpwd
Орбан 21 Диск rdpwd
>rdp-tcp#133 Админ 23 Активно rdpwd
Кудинова 27 Диск rdpwd
Гейкина 4 Диск rdpwd
rdp-tcp#134 жовтоног 25 Активно rdpwd
rdp-tcp#90 Савенков 22 Активно rdpwd
rdp-tcp#97 Ершова 10 Активно rdpwd
rdp-tcp#100 Некрасов 17 Активно rdpwd
rdp-tcp#111 Малышева 29 Активно rdpwd
rdp-tcp#113 Гафетдинова 15 Активно rdpwd
rdp-tcp#125 Жукова 28 Активно rdpwd
rdp-tcp#131 никитин 24 Активно rdpwd
rdp-tcp#135 кодировщик 5 Активно rdpwd
Лог готов, кстати проги на всякий в исключениях Dep
(19) ОК, подправлю
2Mihenius
Вот что получается, когда пишешь конкретно под себя! У меня-то стоит англоязычный Win2003, и висящие я определяю по слову «disconnect». Кинь, плиз, то же, что и в (19), но чтобы был хоть один «висняк» (закрыть сеанс 1С крестом RD). Чтобы узнать — а как оно по-русски пишет 😉
rdp-tcp#106 Недавняя 7 Активно rdpwd
Денисов 8 Диск rdpwd
rdp-tcp#101 Воронина 9 Активно rdpwd
в логе есть такие записи например: Денисов 8 Диск rdpwd
и другие пишет Имя Юзера ID «Диск» rdpwd
Ясно, доделаю. Забыл, что можно русскую систему поставить 😉
Всю жизнь на серваки ставлю только англ.
Ну есть же молодые админы, кот. аглицкого не знают …
Это раньше была рекомендация ни в коем случае не ставить локализацию … или огребете проблем, лучше англ + муи
Кстати еще есть проблема. После убивания сессий, записи в 1cv7.lck не очищаются.
1с-ка при запуске все еще думает что кто-то в базе есть, делаем батник на удаление этих файлов в базах.
Так вот может вам прикрутить удаление этого файла … правда придется искать путь БД …
Это так рюшечка ….
>ак вот может вам прикрутить удаление этого файла … правда придется искать путь БД …
Найти путь к каталогу юзверя, если его терминальное имя совпадает с 1С-ким — как два байта отослать.
На крайняк бум пробовать мочить все lck, ктр. удалятся — те и есть висняки.
Не след. неделе сделаю, пока некогда
Версия 1.8.1.0
Учтено, что существуют и русскоязычные сервера 😉
Добавлен файл LogOffDisconnected.ini (должен находиться в каталоге программы!)
В файле 2 строчки, по которым определяется статус Diconnected и статус Active, например:
Disc
Activ
Для русскоязычного сервера замените эти строчки на соответствующие русские слова
Добавлена подчистка файла LCK при разрыве терминальной сессии.
Программа раз в 7.5 секунды пытается удалить все файлы LCK во всех базах,
зарегистрированных на сервере. Удачная попытка удаления – был «висняк»
Пробовал ставить в инишку
Диск
Активно
Все равно не заработало …
(28) прям чудеса какие-то. постараюсь найти кого-нибудь поблизости с русскоязычным сервером, попрошу проверить…
А можно не закрывать висящие, отключенные сессии для какого-то пользователя или группы пользователей?
Например, мне удобно запустить один раз в сеансе набор нужных программ, а потом подключаться к сеансу, не запуская их заново.
(30) вообще-то я ее узкоспециализированную писал..
Но, в принципе, можно доделать
Притом у нас их 3 штуки и ни на одном не заработало …
Сегодня проверю на Win2k3 R1 Rus просто без сервиспака
Не работает на Win2k3 Eng.
Может она только для 1с 7.7?
(33) Фиг его знает… Но что не для 1с 7.7 — однозначно.
Чую, надо код выложить — уж при желании сами «полечите». У меня Win2003 сервер стоит — пошло с ходу, и пашет уже месяца 3 без сбоев
Пришла мысль, что проблемы с кодировками …
Пробовал с разными все равно 0 эффекта.
Скажи какая у тебя используется кодировка?
(25)Завтра приду на работу -киду код на дельфи. Там настолько все просто — что на что переписать что сможещь: формируется батник, он формирует элементарный текстовый файл… А что чеж тебя мучать? Не садюка я 😉
2 Mihenius
В каталоге ..WINDOWSsystem32\r
должен лежать файл session.txt, примерно такого вида:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
>console Administrator 0 Active wdcon
rdp-tcp 65536 Listen rdpwd
rdp-tcp#5 Administrator 3 Active rdpwd
Глянь, во первых, если ли он, и какая там кодировака
Нет такого файла
Совершенно новая версия: выполнено в виде службы. Таким образом программа стартует и на незалогиненном компьютере.
Тестировалось мной на Win2003 Server (англ) и В. Кушниром на Win2003 Server (рус)
P/S про другие сервера ничего сказать не могу
Спасибо за новую версию — весчь более, чем оббалденная. Результаты тестирования принесли полное удовлетворение — каждое утро начиналось с тревожного ожидания: была ли висючка (висящая сессия) или нет, а от этого зависело прошла ночная переиндексация или накрылась медным тазом. Спецом каждый день приходил на работу на пол-часа раньше, чтобы перезапустить индексацию на случай сбоя. Теперь утром на сервере ни одной сволочи с висящей сессией.
Что понравилось:
1. Любая висючка глушится не позднее 3 сек после «рождения».
2. Очень удобен лог в текстовом формате — его можно считать в 1С и без лишних хлопот увидеть все терминальные сессии, и тут же из 1С убить на выбор кого-нибудь (или всех).
3. Удаление lck после убиения сессии — это вообще песня.
Пожелание: Очень неплохо было бы добавить возможность (ini файл, кпримеру) задавать тайм-аут опроса висюков, а не жестко 3 сек.
В Dep исключения включено … или что-то с политиками не то или хзк
Тип события: Ошибка
Источник события: TerminalSessions.exe
Категория события: Отсутствует
Код события: 0
Дата: 15.10.2007
Время: 10:48:57
Пользователь: Н/Д
Компьютер: BUHSERVER
Описание:
Не найдено описание для события с кодом ( 0 ) в источнике ( TerminalSessions.exe ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера. Попробуйте использовать ключ /AUXSOURCE= для получения этого описания, — дополнительные сведения об этом содержатся в справке. В записи события содержится следующая информация: Процесс службы не может установить связь с контроллером службы.
нашел по поиску следуещее
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=42967
все делал под администратором домена так что с правами проблем быть не должно
(41,42) Ну, честное слово, не знаю… У меня сразу пошла, у Кушнира на русском — тоже.
Больше нигде потестить возможности не имел
Версия 1.4 Удовлетворил пожелание (40)
Добавлен ini-файл для выставления интервалов поиска «висняков» и подчиски оставшихся после этого lck
Если в c:WINDOWSsystem32 будет обнаружен файл
Interval.ini с двумя строчками интервалов в миллисекундах, то таймеры установятся по указанным значениям, в противном случае будут установлены встроенные значения.
P/S. Случайно при обновлении грохнул readme, и под рукой его сейчас нет — извиняйте.
Завтра попрошу В. Кушнира закинуть его мне, и добавлю
Полет нормальный.
Интересует следующий вопрос: Как корректно удалить данное ПО с сервера?
Служба остановлена, но как полностью удалить данную службу?
(46) Ну дык почти так же, как и ставил 😉
Только ключик не /install а /uninstall
А я решил не убивать висящие сессии. я просто по WMI убиваю запущенные процессы 1cv7.exe и 1cv8.exe
я бухов давно уже предупреждал. значит, вообружен.
Если надо — код скрипта могу скинуть, пригодится не только для решения такой задачи.
НУ И ГДЕ ССЫЛКА?
М-да, ссылочку бы на версию 1.4 что бы попробовать…
Может я не туда смотрю … А где можно скачать эту чудесную прогу?
А никто не знает как скриптом закрыть сессии в состоянии «Отключено»/»Disconnected»?
сделайте бат файл с содержанием
tskill *1c* /a /v
и он убивает все на терминале сессии 1с!!!!!!!! все
Спасибо, очень помогает в работе
отрабатывает как положено, огромное спасибо!
(23)
Собственно, а ридмишка где?
Скачал — на 2008 не стартует, не файла readme. Да и в архиве версия 1.1.1.0 а тут вроде обсуждалась уже 1.8.. Можно ссылку?