gifts2017

К вопросу о зависающих фоновых заданиях в 8.1

Опубликовал bulpi bulpi (bulpi) в раздел Администрирование - Сервисные утилиты

Фоновые задания в клиент-серверном варианте иногда зависают так, что снять их можно только путем перезапуска службы. Насколько я понял, никто не знает, что с этим делать. И я не знаю. Но могу поделиться опытом, как научиться с этим жить :)

Входные условия :

Есть в клиент-серверной базе предопределенное регламентное задание с методом МойОбщийМодуль.МояПроцедура1, которое раз в N минут должно что-то делать в базе. Периодически по непонятным причинам фоновое задание, порождаемое регламентным, зависает. Как уже сказано выше, снять его проблематично. Но что еще хуже, новое фоновое задание стартовать не хочет. А зачем? Одно ведь уже выполняется!

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

Как я с этим боролся:

1) Регламентное задание убираем из конфигурации

2) Вводим пользователя специально для выполнения этой процедуры.

3) В Процедуре ПриНачалеРаботыСистемы пишем примерно так:

	 Если ИмяПользователя()="ЭтоСамоеИмя" Тогда
    МойОбщийМодуль.МояПроцедура2();
    ПрекратитьРаботуСистемы();
КонецЕсли;

4) В общем модуле МойОбщийМодуль

	 Процедура МояПроцедура2() Экспорт
    МоеФЗ=ФоновыеЗадания.Выполнить("МойОбщийМодуль.МояПроцедура1",,Строка(ТекущаяДата()));
КонецПроцедуры

5) В Планировщике Windows делаем задание на запуск базы с этим пользователем с нужным расписанием.

Что мы этим достигаем? Того же, что и в первом случае, за исключением того, что каждое фоновое задание запускается с уникальным ключом (см. третий параметр в методе выполнить). Поэтому зависшее фоновое задание не мешает стартовать следующим.

И контрольный выстрел : чтобы почистить зависшие фоновые задания раз в сутки ночью выполняем с помощью планировщика задание на

	 net stop...  net start...

Решение громоздкое, некрасивое и не нравится мне. Прошу сильно не пинать. Это больше приглашение к дискуссии. Буду рад, если кто-то предложит лучше.


См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. dushelov (Душелов) 03.09.09 21:53
Пакетный запуск 1С использовался еще в 7-ке, до появления регламентных заданий.

А с зависшими регламентными заданиями надо разбираться...
2. Maniac (Eugeneer) 03.09.09 22:22
Фоновые задания вообще то присутствуют в списке подключений. Достаточно в контрольое время запускать проверку которая порубит сессии с пустым пользователем.
3. bulpi bulpi (bulpi) 03.09.09 22:41
2 Maniac(2)

Это я пробовал. В том то и дело, что они не рубятся. Впрочем, это как раз такая тема, которая понимается, когда лично тебя петух клюнет. Если вас еще ни разу не клюнул - просто радуйтесь жизни.
Кстати, Вас, Dushelov (1) это тоже касается :)
4. dushelov (Душелов) 03.09.09 22:51
(3) Зависали сессии. Было. Проблема в коде (блокировки транзакций) была. Пишите безопасный код, тогда сведете зависания к минимуму.
tango; theshadowco; +2 Ответить 1
5. bulpi bulpi (bulpi) 04.09.09 12:25
(4)
Во! Это уже конструктифф ! Что Вы имеете в виду под безопасным кодом ?
Немного подробнее о том, что делается в зависающей процедуре. Вызывается через Интернет (web-интерфейс) другая база, туда-сюда гоняются xml-строки, создаются и проводятся документы.
6. Алексей Новоселов (a-novoselov) 17.02.10 15:21
(0) Через консоль кластера задание не убивается??? Что-то с трудом в это верится...
Кстати, с пустыми именами пользователя в консоли могут висеть не только фоновые задания, но и, например, пользователи, которые оставили окошко с вводом пароля аутентификации... соединение есть, а пользователя нет (еще не вошел). Тоже нормально гасятся через консоль кластера 1С.
7. dushelov (Душелов) 17.02.10 15:57
(6) Не убиваются. Замечено не однократно.
И соединения не гасятся, блокировка регламентных и соединений в консоли тоже не помогает.
8. Алексей Новоселов (a-novoselov) 17.02.10 16:47
(7) А что пишет? Блокировка-то понятно, что не помогает... А вот когда заходим в консоль серверов 1С предприятия, выбираем в дереве наш кластер\сервер\нашу ИБ\соединения... нажимаем на нужное правой кнопкой, пункт "Удалить", и не убирается? или снова появляется? или ошибку выдает?
9. dushelov (Душелов) 17.02.10 16:50
(8) Соединение удаляется и появляется снова.
10. Алексей Новоселов (a-novoselov) 17.02.10 17:11
(9) Дак надо код тогда смотреть, нахрена она в цикле в базу долбится. Против пользователей, которые на автоподключение 1С-ку ставят блокировка помогает, а вот с заданиями похоже надо с каждым конкретным случаем разбираться. Хотя тут конечно спорный вопрос. Конечно программа должна работать так, как хочет программист, но если код платформы закрыт, то может что-то и в ней глюкать. Но это очень маловероятно, т.к. платформа 8.1 вылизана до мелочей...
11. dushelov (Душелов) 17.02.10 17:13
(10) При чем тут вообще цикл?
12. Александр Венгер (venger) 17.02.10 17:25
(10)
...т.к. платформа 8.1 вылизана до мелочей...


:D
13. Михаил Ражиков (tango) 17.02.10 17:31
(10) "платформа 8.1 вылизана до"

удивляйся
http://www.infostart.ru/public/65146/
14. dushelov (Душелов) 17.02.10 17:41
15. Алексей Новоселов (a-novoselov) 17.02.10 17:42
Ладно, про вылизанную платформу погорячился чуток)) Хотя в типовых решениях данные всетаки обработками в режиме энтерпрайз к нормальному виду приводятся... Но вот такой жесткий косяк, если код за собой тапки пытается убрать (ЗавершитьРаботуСистемы) а платформа этот код все равно весит... Просто слов нет, как это называется.
16. Михаил Ражиков (tango) 17.02.10 18:07
17. Александр Цегельников (markers) 06.08.10 06:49
(8) У меня даже не повисшие фоновые не рубятся ни через что..... как писал (9) соединение появляется вновь. А вообще как и говорилось, надо отлаживать код... У нас были моменты когда фоновое зацикливалось и вообще блокировало доступ в базу, подставив в нужном месте ЗафиксироватьТранзакцию(); проблема снялась. И т.д. и т.п.
18. Николай Павлович (PaNick) 02.10.10 19:19
Автор прав, глюк есть. Он проявляется при доступе в инет. Например обмен с фтп. Сессия подвисает и не убивается. Его вариант удобен, если есть возможность сделать перерывы в работе. А если база должна работать 24 часа, приходится извращаться другими способами. Я вышел тоже кривым способом: создал клиентскую обработку, которая подстраховывает на случай зависания задания. И при зависании пользователям сыпятся сообщения, что нужно ее запустить в отдельной программе. Благо виснут они не очень часто - раз-два в месяц. Но всеж было бы замечательно без этого )
19. Александр Назаренко (xantimans) 17.11.10 13:03
А в этом фоновом задании случаем OLE не используете? Если да, то скорее всего он и виноват, ненадежный зараза :cry:
20. bulpi bulpi (bulpi) 17.11.10 13:30
(19)
Нет, дело в том, что в процессе выполнения задания идет обращение в интернет. Зависает ТАМ. Я раскопал в документации объяснение, что снять задание невозможно, т.к. в серверных процедурах останов действует, только когда управление передается на следующий оператор за тем, во время которого произошла попытка останова. А управление не передается никогда, т.к. зависло. Можно переписать с серверных процедур на клиентские, раз я все равно запускаю сеанс. Но тогда кто-то должен вручную снять задание, т.е. кто-то должен следить за этим. А чтобы не следить, вот я и предложил такое.
21. Алексей (Alav) 26.01.11 11:51
Есть такое и на 8.2. причем там хуже. В режиме УФ часто используются фоновые, поэтому там чаще он себя проявляет.

Например накидал отчет на СКД, который тупо выводить содержимое регистра. На толстом клиенте в обычном режиме - все ОК, за секунду выводит. в режиме УФ виснит зараза (пораждает фоновый процесс, а результата нет). Помогло только рестарт сервера предприятия. Тогда сразу все взлетело.

P.S. А кто нибудь рестарт рабочих процессов настраивал, для борьбы с этим?
22. WellMaster (WellMaster) 24.02.11 16:21
Сам когда-то пытался бороться с проблемой завершения и удаления фоновых заданий (причем не только зависших, но и просто отработанных). Пришел к выводу, что это невозможно.
Также ищу решение по задаче рестарта работчих процессов.
23. Михаил Ражиков (tango) 24.02.11 19:03
фоновое задание, убивающее фоновые задания
Это я так, сказал просто
24. Олег Веселов (sml) 27.03.12 17:25
у меня те же грабли. То задания выполняются, а то вдруг в какой-то момент виснут, причем иногда все сразу.
25. Володимир Костюк (voshkaniridze) 24.02.13 20:23
У меня такая проблема, переходить на предложенную схему неохота. А как узнать где именно зависает? Может блокировки, может транспорт? Как узнать?