Консультация № 184180
09.10.2011, 23:47
63.05 руб.
10.10.2011, 09:53
0 17 2
Здравствуйте! У меня возникли сложности с таким вопросом:
Доброго времени суток.)
Прошу помощи вот с чем..
WinServ2003Ent, на нем в терминале (удаленный рабочий стол, по батнику запускается 1С) круглосуточно работают пользователи 1С. (днем офис, вечером логисты, ночью склад).
Программист 1С попросил выделить ему два часа ночью, чтобы он мог настроить бэкап баз.
Но сейчас сделать этого не может, потому как базы постоянно открыты.
Базы под SQLем.
Пока не вдаваясь в иные возможности бэкапирования данных 1С, вопрос спрошу такой:

Какими штатными средствами можно сделать так, чтобы с 3х до 5ти ночи всех работающих юзеров в терминале выбрасывало и не пускало на сервер в течении этого времени?
Решением в лоб я думал просто по батникам чтоб в шедулере просто останавливалась, а потом запускалась служба терминалов, но потом дошло, что это не совсем служба, а роль сервера, и как то сразу пока больше в голову ничего не приходит...
Одним словом, как мне на два часа выкинуть всех пользователей, и чтобы при попытке их входа опять их пока не пускало, а за это время пройдут все бэкапы..?


И второй вопрос вдогонку, потому как просто пока не пойму, где копать..
В свойствах каждого пользователя прописано "Завершать сеанс" после "3х часов бездействия". Но когда захожу в диспетчер tsadmin, вижу, что висят отключенные пользователи уже часов по 5 и более.. Почему из не выкидывает автоматом с завершением сеанса? Где мой косяк? (я про настройку, траву не курил))

Вообщем надо как то штатными средствами выгонять пользователей из терминала и не пускать их туда пару часов...

Спасибо всем заранее)
Выручали не раз уже, надеюсь и на сейчас тоже)

С Уважением ко всем, Виталий)

Обсуждение

Неизвестный
09.10.2011, 23:52
общий
PS, почему то не нашел кнопки "Редактировать", после того как отправил, как то айс) Не ожидал такой подставы от столь солидного портала)
Пока последующих ответов не поступило, кнопочку можно было бы и предусмотреть как то..))
Или просто я не увидел, тогда извинюсь сильно)

PS2, а если по теме, фразу "Вообщем надо как то штатными средствами не выгонять пользователей из терминала и не пускать их туда пару часов..." читать как "Вообщем надо как то штатными средствами выгонять пользователей из терминала и не пускать их туда пару часов..."
давно
Мастер-Эксперт
259041
7459
10.10.2011, 04:11
общий
Особый программист, производящий Бэкап, может запускть стартовый cmd-файл ( 1sLoader.cmd ) с параметром /Backap . От такого параметра можно вызывать спец-процедуру с командой Tasklist , и если она обнаружит , что 1С-модуль загружен, запустит кмд Taskkill , выгружающую 1С-модуль из опер-памяти. Можно предусмотреть тайм-аут , предупреждающий юзеров перед их отключением от баз.

Если Бэкапер не пользуется Вашим неограниченным доверием, то мож ограничить его действия интервалом времени ( if "%time%" gtr "02:00" …).

Но , надо ли мудрить свою программу? Возможно, в 1С-инструмах уже имеется готовое решение? (Однажды я отвечал на подобный вопрос , но 1С-спецы предложили более изящный путь).
Советую Вам просить модератора перенаправить Ваш Вопрос сначала в 1С-рассылку.
Неизвестный
10.10.2011, 07:18
общий
это ответ
Приветствую.

Вариант №1:

Процедура СбросЮзверьков()
Если НазваниеНабораПрав() <> "Администратор" Тогда
ЗавершитьРаботуСистемы(1);
Иначе
КонецЕсли;
КонецПроцедуры


Конечно сюда необходимо прикрутить процедуру таймера и рассылки предварительного сообщения всем пользователям, о том что будем происходить отключение.

Данную процедуру необходимо закинуть в Обработку и как вариант поставить на проверку через каждые 5 сек, для особо "сложных".

Вариант №2:

Самый простой способ - физический, отключаем сеть. Вариант опасный, не думаю что он того стоит, можно нарваться на "падение".
Неизвестный
10.10.2011, 08:52
общий
10.10.2011, 08:52
Остановка службы удаленного доступа приведет к тому, что текущие сессии отвалятся и никто не сможет подключиться по удаленному рабочему столу - тут ничего "смертельного" и роль сервера тут ни при чем совершенно, так что можно сделать и так (хотя это грубоватый способ).
по поводу зависших сессий - посмотрите раздел групповых политик, касающийся терминального сервера, может там есть что-то касающееся данных настроек (где искать GP для TS написано ЗДЕСЬ)
Неизвестный
10.10.2011, 08:58
общий
SQL вполне может бэкапить свои базы во время работы пользователей.
Причём делать можно и полное резервное копирование, и дифференциальное.
Именно так деается бэкап баз у меня.

Бэкап SQL занимает больше места, чем бэкап средствами 1С (из-за отсутствия сжатия), зато занимает гораздо меньше времени и потребляет меньше системных ресурсов - т.о. меньше загруженность сервера, к которому подключены пользователи.
в сети
Управляющий
143894
2148
10.10.2011, 09:54
общий
Исправил ошибку в Вашем вопросе.
Об авторе:
Устав – есть устав! Если ты устав – то отдыхай!


Неизвестный
10.10.2011, 10:21
общий
10.10.2011, 10:23
Спасибо большое всем.
Перечитал внимательно.
По мере вникания буду задавать вопросы, и сейчас 1Снику позвоню, чтоб тоже ветку эту глянул..

***
"Приветствую.

Вариант №1:

Процедура СбросЮзверьков()
Если НазваниеНабораПрав() <> "Администратор" Тогда
ЗавершитьРаботуСистемы(1);
Иначе
КонецЕсли;
КонецПроцедуры


Конечно сюда необходимо прикрутить процедуру таймера и рассылки предварительного сообщения всем пользователям, о том что будем происходить отключение.

Данную процедуру необходимо закинуть в Обработку и как вариант поставить на проверку через каждые 5 сек, для особо "сложных".

Вариант №2:

Самый простой способ - физический, отключаем сеть. Вариант опасный, не думаю что он того стоит, можно нарваться на "падение"."



Если правильно понял, способ 1 для 1С? Тогда это к 1Снику, мы с ним не лезем в дела друг друга)
Способ 2 прикольный, но не прокатит. Во первых, сеть порвать запросто, а сессии висеть останутся. Не айс. А второе, и сам не попаду в сервак. А вот это совсем не айс.

***
Цитата: Алексеев Владимир Николаевич
Особый программист, производящий Бэкап, может запускть стартовый cmd-файл ( 1sLoader.cmd ) с параметром /Backap .

Это я так понимаю, тоже стезя 1Сника..

***
Цитата: 149648
SQL вполне может бэкапить свои базы во время работы пользователей.
Причём делать можно и полное резервное копирование, и дифференциальное.
Именно так деается бэкап баз у меня.

К сожалению, как бы глупо это не звучало, я SQL и его возможности совсем незнаю. Базу под него поднимал 1Сник. Но я у него проконсультируюсь обязательно.
Если не жалко открыть карты, то вкратце объясните, пожалуйста, процедуру, как это у вас. Может мы пойдем по похожему пути, если поймем..))

***
Цитата: 161519
Остановка службы удаленного доступа приведет к тому, что текущие сессии отвалятся и никто не сможет подключиться по удаленному рабочему столу - тут ничего "смертельного" и роль сервера тут ни при чем совершенно, так что можно сделать и так

Если скажете, как, я пока на этом и остановлюсь) Дело в том, что в свойствах служб для службы "Служба терминалов" у меня почему то не ту возможности остановки и запуска службы.. Может я не ту смотрю? Тогда какую службу стопнуть? И если батники правильные дадите, вообще и пивом напою))
По поводу групповых политик сейчас посмотрю, что там..)

Спасибо за обсуждение.)
А то, когда чтото не так работает и причину найти не могу, как то неудобно для себя даже)

***
Цитата: Сергей Фрост
Исправил ошибку в Вашем вопросе

Спасибо.)
Неизвестный
10.10.2011, 11:16
общий
Здравствуйте, Виталий.

Часть1.
База данных SQL состоит из двух частей - собственно база данных (там все Ваши данные из 1С на определенный период) и журнал транзакций (там хранятся изменения, внесенные в базу данных от момента её актуализации до текущего момента). Без периодического актуализирования (это не оф. термин) базы данных журнал транзакций может ОЧЕНЬ сильно увеличиваться в объёме, заполняя место на жёстком диске. Журнал транзакций служит для отката изменений, внесённых в базу с момента последней актуализации.
Исходя из этого делать резервное копирование баз SQL вообще-то очень полезно в любом случае, потому что при этом происходит актуализации базы данных: изменения из журнала транзакций переносятся в файл базы, а файл транзакции очищается.

Здесь можно посмотреть инструкцию с картинками по настойке резервного копирования SQL для 1С.

Вкратце процесс следующий:
1) Определяем время и периодичность резервного копирования, например, каждую ночь в 2 утра или каждую субботу в полночь.
У меня настроено резервное копирование в полночь, когда меньше всего пользователей в 1С ведь создание резервной копии в любом случае повышает нагрузку на дисковую систему сервера.
2) Определяем базы, которые будем резервировать, если у Вас их несколько (база для склада, база для бухгалтерии).
У мня настроено ежедневное резервное копирование торговой, складской и бухгалтерской баз и раз в месяц - зарплатной базы.
3) Создаём в SQL Manager'е на сервере задания по резервированию баз, как указано в ссылке выше.

Часть 2.
Также не стоит забывать, что 1С - это не только база данных, но и файлы конфигурации. Их тоже имеет смысл резервировать, хотя бы перед обновлением конфигурации. В конце указанной выше статьи есть ссылка на резервное копирование средствами Microsoft Server. Оно хорошо тем, что также позволяет делать резервные копии без остановки работы пользователей.

Часть 3.
Если есть задача всё же и резервные копии получить, и место сохранить, то можно сделать сначала резервные копии баз данных и файлов конфигурации средствами MS SQL Management и MS Server, а потом заархивировать это всё любым архиватором - WinRAR или 7-zip и т.д.
Неизвестный
10.10.2011, 11:25
общий
Конечно, можно искать разные способы "отрезать" пользователей от 1С на время резервного копирования, но я вижу по меньшей мере четыре проблемы:
1) Если человек работал в 1С в момент "отруба", то что станет с данными, которые он редактировал?
2) Что делать, если в момент резервного копирования кому-то необходимо позарез иметь доступ в 1С?
3) Базы 1С со временем разрастаются. А значит - увеличивается время резервного копирования. Если сейчас база архивируется за два часа, то через год этот процесс может уже три часа занимать.
4) Если во время резервного копирования возникнут проблемы, и процесс зависнет, то пока Вы не вмешаетесь, никто не сможет работать с 1С.

Когда у меня встала проблема резервного копирования 1С, я тоже сначала думал, как бы всех выгнать из 1С... Но у нас такой возможности совсем нет. "Мой" (хотя он задо-о-олго до меня практикуется) метод хорош тем, что Вы получаете актуальную копию базы при полноценной работе сотрудников в 1С. Они вообще могут и не знать, в какое время идёт резрвное копирование.
И кстати происходит всё реально "штатными средствами"!
давно
Мастер-Эксперт
259041
7459
10.10.2011, 12:32
общий
"запускть стартовый cmd-файл ( 1sLoader.cmd ) с параметром /Backap - Это я так понимаю, тоже стезя 1Сника" - нет, это 1 из способов запуска 1С-загрузчика 1sLoader.cmd. Рядовые польз-ли запускают просто \\Server\1sLoader.cmd , и этот загрузчик днём предоставляет юзерам обычную работу с 1С.

Бэкапер запускает \\Server\1sLoader.cmd /Backap , и тогда 1sLoader.cmd (посредник) "понимает", что его запустили с повышенными правами для спец-операций (отключени всех юзеров и начала бэкапа).

Ваш 1С-ник не обязан знать про эту тонкость, а будет просто кликать на ярлык с параметром, который Вы ему покажете.
Неизвестный
10.10.2011, 12:48
общий
Спасибо за ответы, попробую вникнуть сейчас)
Что возникнет с вопросами, отпишусь)
Неизвестный
10.10.2011, 16:51
общий
10.10.2011, 16:52
Вы оказались совершенно правы - в Windows 2003 нельзя из консоли или командной строки перезагрузить сервисы терминала - это его конструктивная особенность
написал небольшой скрипт (во вложении) для перезагрузки сервиса по ID, но проверить его негде, так что попробуйте - может он будет перезагружать процесс (другие процессы успешно перезагружает - пробовал на spooler)
Неизвестный
10.10.2011, 22:29
общий
Цитата: 161519
по поводу зависших сессий - посмотрите раздел групповых политик, касающийся терминального сервера, может там есть что-то касающееся данных настроек

Спасибо, действительно был косяк) Стояла галочка "заменить настойки пользователя" и там было "никогда") То есть при любых настройках пользователя никогда их не выкидывать и не разрывать сессий)
Галочку снял, проверю, как будет)



По поводу
Цитата: 161519
написал небольшой скрипт (во вложении) для перезагрузки сервиса по ID, но проверить его негде, так что попробуйте
проверил, но работать скрипт не захотел.
Я немножко в него залез, не очень понял, как он по имени найдет ИД процесса. У меня ВинСервер РУС, если это важно.. И строка службы, отвечающая за запуск "службы терминалов" выглядит C:\WINDOWS\System32\svchost.exe -k termsvcs , если это будет полезно.
Неизвестный
10.10.2011, 22:52
общий
Наверное я нашел, как это можно сделать, и что меня устроит. Ну и может быть, еще кому инфа эта поможет, вдруг решение подобной задачи понадобиться..)

1. Пуск-программы-администрирование-настройка служб терминалов.
2. Левое окно "подключения", правое окно РДП-тсп правой мышкой, "все задачи", там "отключить подключения".

Всё)
Подключения рвутся, кто были в терминале, вываливаются, (я тоже), зайти не пускает.) То, что нужно.

Зашел через типа РАдмина, повторил оба пункта, за исключением последней фразы "включить подключения".
Удаленка опять заработала.)

Гуру, а вот два батника (типа tsstop.bat и tsstart.bat ) теперь корректных может быть кто нибудь правильно напишет?)
Ну чтобы они эту операцию (выкл и вкл) делать могли?)
Я их тогда в шедулер всуну и всё.)
Вот на их написание у меня пока мозги не варят.)
Или может, это вообще не батники, а программа какая?

Спасибо)
Полрешения уже нашел, и настроение получше)
Осталось до конца допинать)
давно
Мастер-Эксперт
259041
7459
11.10.2011, 03:09
общий
Эксперты предложили Вам несколько удачных опробованных вариантов. В 1С-рассылке Вам помимо этого разъяснят, как использовать "Монопольный режим", чтобы, например, в обеденный перерыв или сразу по окончани рабочего дня программист мог обновить бэкап, не отключая юзеров от базы.

Если Вы хотите "идти своим путём", используя "батник", то Вам надо представить неприятности, могущие возникнуть от непредвиденных ошибок свеже-написанной программы. Базы - это не игрушка. Поэтому, в сценарии надо обязательно предусмотреть авто-создание лога (для анализа ошибок/недоделок) и страховку (вдруг зависнет сценарий - и тогда надо прекратить бэкап и всё-таки подключить пользователей к базам).

Cmd-файл - это набор команд Cmd-процессора и специальных системных комад. Задайте отдельный Вопрос, обрисуйте желаемый Вами алгоритм ("если - тогда"), укажите, какие ключевые команды (или их функции) Вы хотите использовать в сценарии (разорвать подключения, что и куда копировать?), и эксперты продумают для Вас tsstop.cmd (.bat - это DOS-атавизм). Успехов!
Неизвестный
11.10.2011, 09:08
общий
11.10.2011, 09:11
Цитата: 375588
Я немножко в него залез, не очень понял, как он по имени найдет ИД процесса. У меня ВинСервер РУС, если это важно.. И строка службы, отвечающая за запуск "службы терминалов" выглядит C:\WINDOWS\System32\svchost.exe -k termsvcs , если это будет полезно

Команда
Код:
tasklist /svc /FI "SERVICES eq TermService"
выводит из списка процессов, которые относятся к службам, ту запись, где в названии встречается слово TermService (не думаю, что в русской версии имя службы изменено на что-то другое), далее скрипт при помощи регулярного выражения ищет в данной записи цифры (кроме ID цифры в выводе не должны нигде содержаться).
Попробуйте вручную "убить" процесс, который отвечает за терминал, и если это не получится, значит и командой сделать такого нельзя - поэтому скрипт и не работает

Цитата: 375588
Гуру, а вот два батника (типа tsstop.bat и tsstart.bat ) теперь корректных может быть кто нибудь правильно напишет?)
Ну чтобы они эту операцию (выкл и вкл) делать могли?)

С bat-файлом вряд ли получится, т.к. в списке команд управления службами терминалов нет команды, позволяющей отключить все сессии. Конечно можно написать скрипт, который получил бы список ID всех сессий и после этого завершил бы их. Но написать-то я напишу, а вот когда смогу его проверить и отладить - не знаю.

[offtop]
Цитата: Алексеев Владимир Николаевич
.bat - это DOS-атавизм

Cmd - тоже не вчера родился а вообще на PowerShell давно переходить надо, но так лень в нем разбираться...[/offtop]
давно
Профессор
7764
1433
13.10.2011, 12:11
общий
это ответ
Здравствуйте, Виталий!
По первому вопросу.
В управлениии SQLServer'ом(Management>Backup) правый клик мышью(ПКМ), выбираем New Bacup Device. Выбираем файла базы данных. Потом на созданном задании ПКМ, выбираем Bacup a Database и настраиваем время и остальные параметры.
Таким штатным способом резервируются(бэкапятся) ваши базы. Как писал уважаемый Dipauler это позволяет их бэкапить "без отрыва от произщводства".
Прислушайтесь к советам экспертов. Не надо отключать терминальные сессии. Когда возникнет первая потеря данных, может вспомните про этот совет.
Продолжаем. Так как бэкапы SQLServer'а занимают много места, нужно использовать Cobian Backup.
Программа бесплатна, умеет сжимать по расписанию как отдельные файлы, так и каталоги со всем содержимым. Русская. Сжимает очень хорошо. Умеет отправлять результат на ftp. Да и много чего ещё.
По второму вопросу.
У меня на всех сервах такие параметры в настройке служб терминалов:
Включен чекбокс на Заменять параметры пользователя:
Завершение отключенного сеанса 10 минут (отключает неактивные сессии)
Ограничение активного сеанса Никогда
Ограничение бездействующего сеанса 30 минут (может сотрудник в буфет ушёл, а сессию не завершил)
И самое главное(чуть пониже): При превышении количества подключений или разрыве подключения надо выбрать Отключить сеанс.


Форма ответа