|
Как узнать результат команды "/CЗавершитьРаботуПользователей"? | ☑ | ||
---|---|---|---|---|
0
zelenprog
05.12.24
✎
10:53
|
Здравствуйте!
Используется "стандартный" скрипт для резервного копирования. Последовательность команд в нем примерно такая: 1) ...\1cv8.exe ... /CЗавершитьРаботуПользователей ... 2) ждем 10 мин. 3) выполняем резервную копию 4) ...\1cv8.exe ... /CРазрешитьРаботуПользователей ... Часто первый пункт (/CЗавершитьРаботуПользователей) не выполняется. Но скрипт этого "не знает" и пытается делать копию базы. Естественно возникает ошибка со всеми вытекающими. Был даже такой случай, когда на этой команде 1С-ка жестко зависла, база не освободилась, но никто войти с утра в базу не мог. Можно ли как-то из скрипта (или из внешней программы) "узнать", что работа пользователей реально завершена и база свободна? В идеале хотелось бы, чтобы скрипт делал следующие действия: 1) Запускаем "1cv8.exe ... /CЗавершитьРаботуПользователей" и запоминаем ИД процесса 2) Ждем некоторое время - проверяем освободилась ли база 3а) Если база освободилась - делаем копию 3б) - Если база не освободилась... - Проверяем не завис ли процесс. Если процесс висит - убиваем его Как это сделать? |
|||
1
Доминошник
05.12.24
✎
11:46
|
(0) А что, "Обновлятор" не справится с такой задачей?
|
|||
2
zelenprog
05.12.24
✎
12:31
|
(1) С какой задачей?
Со всей задачей, включая резервную копию? Или только с той "частичной" задачей, про которую я спрашиваю - проверка блокировки базы? Если имеется ввиду "полная" задача с созданием резервной копии, то ответ "нет" - Обновлятор не справится. Так как есть особые требования к созданию копии. Надо не просто заархивировать 1Cv8.1CD. Но это уже отдельный разговор. А если имеется ввиду "частичная" задача освобождения базы, то... Если можно Обновлятор запустить извне, чтобы он выполнил эту команду и вернул результат - то этим конечно можно воспользоваться. Только как? |
|||
3
Fedor-1971
05.12.24
✎
13:09
|
(0) Попробуй так
start /wait "Запускаем "1cv8.exe ../CЗавершитьРаботуПользователей" - пока не выполнится, дальше по скрипту не пойдёт можно проверять ErrorLevel == 0 - нормально сработало, любые другие значения - обломалось |
|||
4
PLUT
05.12.24
✎
13:23
|
||||
5
PLUT
05.12.24
✎
13:27
|
блокировка по времени начала/кончала с кодом разрешения поинтереснее будет?
сеансы волшебным образом завершаются, ну бывает иногда "зависшие" сеансы не удаляются... БлокировкаСеансовБлокировка = Новый БлокировкаСеансов; Блокировка.КодРазрешения = Настройки["КодРазрешения"]; Блокировка.Начало = НачалоДня(ТекущаяДата()) + Число(Настройки["ВремяНачалаБлокировки"] - Дата(1,1,1)); Блокировка.Конец = НачалоДня(ТекущаяДата()) + Число(Настройки["ВремяОкончанияБлокировки"] - Дата(1,1,1)); Блокировка.Сообщение = Настройки["ТекстСообщения"]; Блокировка.Установлена = Истина; УстановитьБлокировкуСеансов(Блокировка); |
|||
6
zelenprog
05.12.24
✎
13:58
|
(3) >> Попробуй так
start /wait .. /CЗавершитьРаботуПользователей" - пока не выполнится Не, пока не выполнится нельзя. Я же выше написал, уже были такие неприятные ситуации, когда 1С-ка зависла на этом этапе с 20-00 вечера, и никто не мог войти в базу до 11-00 следующего дня. Нужно обязательно ждать определенное время, а потом все это убивать. >> можно проверять ErrorLevel == 0 - нормально сработало Я конечно, проверю... Но как мне помнится там всегда код возврата = "0". |
|||
7
PLUT
05.12.24
✎
13:54
|
(6) по рабоче-крестьянски - ставишь блокировкусеансов по времени начала/кончала. ждешь ко времени начала + 5 минут. ребутаешь службу сервера 1С (ну там стоп службы агента, пауза, старт службы агента) и дальше делайте что хотите?
|
|||
8
zelenprog
05.12.24
✎
13:58
|
(7) >> ставишь блокировкусеансов по времени начала/кончала. ждешь ко времени начала + 5 минут
Как это сделать из внешнего скрипта\программы? >> ребутаешь службу сервера 1С (ну там стоп службы агента, пауза, старт службы агента)
Пока что я эту проблему решаю с файловой базой. Но после этого придется что-то похожее делать и с серверной базой. |
|||
9
PLUT
05.12.24
✎
14:00
|
(8) 🤦
|
|||
10
Мультук
гуру
05.12.24
✎
14:42
|
(8)
>> что-то похожее делать и с серверной базой Там-то зачем для бэкапа пользователей выгонять ? Или в Postgre всё так печально ? |
|||
11
zelenprog
05.12.24
✎
17:43
|
(10) Нет для серверной не надо. Это я погорячился.
Для файловой надо. Сбило с толку упоминание про "ребутаешь службу сервера 1С (ну там стоп службы агента, пауза, старт службы агента)" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |