Проблема
Ко мне обратился один из пользователей обновлятора со следующей проблемой:
И он предложил добавить в обновлятор следующую функциональность:
Решение
1. Перейдите в обновляторе на закладку "Скрипты":
2. Здесь выберите тип скрипта "Пакетный" и базу, в которой требуется периодически завершать неиспользуемые сеансы на сервере 1с:
3. Далее нажмите пункт "обновлятор", далее "Методы", далее "Завершение неиспользуемых сеансов":
4. Откроется диалог со следующими параметрами:
Пробежимся по его настройкам.
а. Прежде всего мы задаём типы сеансов на сервере 1с, которые нужно обрабатывать. По умолчанию, отмечены только 1CV8 и 1CV8C - толстый и тонкий клиенты соответственно. Если вы хотите, чтобы обрабатывались и другие типы сеансов, отметьте их галками.
б. Выбор между "в базе" и "в кластере". Нужно понимать, что скрипт всегда запускается для какой-то конкретной базы, которую мы выбрали в настройках. Если таких баз 10 скрипт запускается 10 раз для каждой из этих баз. Если выбран пункт "в базе", то обрабатываются только сеансы базы, для которой сейчас выполняется скрипт. Если же выбран пункт "в кластере", то обрабатываются все сеансы кластера, в который входит база.
в. Пункт "неактивные более Х минут". Сеансы, которые неактивны более X минут будут завершаться принудительно. Внимание. Для реализации этой опции обновлятор ориентируется на последнюю активность сеанса, которую нам возвращает сервер. Это значение можно увидеть в оснастке кластера в колонке сеанса "Последняя активность". К сожалению, в большинстве случаев (видимо фоновое поведение клиента) эта колонка обновляется кластером даже если пользователь не работает напрямую в базе. Я не нашёл других способов узнавать именно пользовательскую активность в сеансе.
г. Пункт "спящие". Если поставить эту галку, то сеансы, у которых установлен признак Hybernate (спящий), будут завершаться принудительно.
д. Пункт "дубли". Если поставить эту галку, то сеансы запущенные в одной и той же базе, с одного и того же компьютера, под одним и тем же пользователем будут считаться дублями. Из всех дублей будет оставляться только самый старый сеанс (запущенный первым из всех), а все остальные будут завершаться принудительно.
В нашем случае мы хотим, чтобы завершались все сеансы кластера, в который входит база, если:
- сеанс является толстым или тонким клиентом
- сеанс неактивен более 10 минут
- сеанс заснул
Настройки диалога будут такими:
Нажимаем OK и в текст скрипта вставляется следующая команда:
Если вы программист или опытный администратор, то думаю без труда понимаете какой параметр здесь за что отвечает.
Снимаем (если они стоят) все галки, они нам в этом скрипте ни к чему:
Теперь можете смело экспериментировать, чтобы убедиться что скрипт делает то, что вам нужно. Для этого создавайте необходимые условия для завершения сеансов и нажимайте кнопку "Запустить".
Предположим, что всё в полном порядке.
Осталось сохранить этот скрипт в планировщик, чтобы он запускался по расписанию.
Нажимаем кнопку "Сохранить":
В открывшемся диалоге зададим путь и имя (сделайте его осмысленным) скрипта. Из галок обязательно поставим "Закрывать обновлятор после работы скрипта" и "Настроить однократный запуск скрипта через планировщик Windows":
Нажмём "ОК" и укажем авторизацию пользователя, под которым нужно выполнять скрипт:
Снова нажмём ОК. Готово, скрипт добавился в планировщик заданий.
Теперь перейдём в планировщик заданий Windows и уже в нём настроим нужную нам периодичность запуска:
Откроем задание на редактирование и на закладке "Триггеры" укажем, что хотим выполнять задачу ежедневно каждые 15 минут:
На этом всё.
Замечание
Если планируется достаточно частое выполнение этого скрипта, я советую вынести эту задачу в отдельный (портативный установленный) экземпляр обновлятора.
Нужно понимать, что технически запуск скрипта равносилен запуску обновлятора для выполнения определенных задач. А такие запуски в рамках одного экземпляра программы выстраиваются в очередь. И если у вас ночью запустилось пакетное обновление баз на 8 часов, то пока все эти обновления не отработают, никакие скрипты запущены не будут.
В целом под небольшие и часто повторяемые задачи я советую выделить отдельный экземпляр программы.
Также отдельно обращаю внимание на то, что вы можете сохранить несколько скриптов с разными параметрами контроля сеансов для разных баз/групп баз/кластеров.