[ОТВЕТИТЬ]
08.05.2014 22:56
KirillHome
 
Есть сервер - Windows 2008 R2 х64
На этом же сервере установлена файловая 1с (БП, 3.0)
Нужно выполнять ряд задач ночью - для этого была написана внешняя обработка, выгружающая данный из 1с.
Как обычно - засовываю это в планировщик заданий (как это было на другом сервере под Windows 2003 х32).

Задание, как правило, выполняется за 3 минуты.
В планировщике стоит ограничение - не более 15 минут.

Проблема - в диспетчере задач висит процесс 1с от пользователя, запускающего эту ночную задачу.
Соответственно - за два дня - два процесса, за 3 - три и т.д.

Вопрос: что можно сделать, что бы не было этих "висящих процессов"?
08.05.2014 23:00
OlegON
 
В свойствах задания есть два места, где прописывается это "не более". И, если ничего не путаю - "принудительно завершать".
08.05.2014 23:01
OlegON
 
Цитата:
baggio taskkill /?
Кстати, да, во-первых можно попробовать taskkill /IM сделать ему, посмотреть, что напишет. А то и taskkill /IM /F потом вбить на утро, т.е. когда его точно не должно быть.
08.05.2014 23:20
KirillHome
 
В параметрах стоит вот это
Миниатюры
Нажмите на изображение для увеличения
Название: Параметры.jpg
Просмотров: 770
Размер:	73.6 Кб
ID:	3431  
08.05.2014 23:32
KirillHome
 
Есть ещё ряд интересных особенностей.

Понятно, что пользователь, под кем это задание выполняется - не залогинен на этом сервере.
Если потом зайти данным пользователем, и посмотреть диспетчер задач - то процесс не виден.
Если поставить птичку "отображать процессы всех пользователей" - то тогда этот процесс становится виден.

Минут через десять проверю, что происходит если пользователь для выполнения задания - вошёл в систему.
Миниатюры
Нажмите на изображение для увеличения
Название: Диспетчер (1).jpg
Просмотров: 650
Размер:	82.6 Кб
ID:	3432   Нажмите на изображение для увеличения
Название: Диспетчер (2).jpg
Просмотров: 592
Размер:	94.9 Кб
ID:	3433  
08.05.2014 23:43
KirillHome
 
Посмотрел, если пользователь залогинен на сервере - то никакого "подвисания процесса" не происходит.

TASKKILL - конечно, можно, но как-то это... Топорно, что ли?
Пока буду думать, что ещё можно сделать.
09.05.2014 08:23
OlegON
 
А первая закладка как выглядит? Там можно запускать с логином пользователя, а можно с наивысшими правами.
То, что в диспетчере не видно - нормально, контекст не только пользователя, но и сессии.
Не используется передача нажатий кнопок? Некоторым приложениям десктоп нужен. На каком этапе приложение виснет? Дебаг можешь включить?
09.05.2014 10:37
KirillHome
 
На первой закладке - стоит и "Выполнять вне зависимости от регистрации пользователя" и "Выполнять с наивысшими правами"
Добавил на закладке "тригеры" ограничения по времени выполнения (до этого не было, было ограничение только на закладке "Параметры").

Кнопок никаких не нажимается, вызывается внешняя обработка 1с, которая собирает данные из 1с, выводит их в текстовый файл и закрывает 1с.

Так, стоп, это я оказался тупицей.
Помимо того, что 1с - не закрывается при таком запуске, ещё и выходной файлик не создаётся! (Не проверил дату и время создания выходного файла перед открытием темы).
Теперь есть куда копать.
Буду думать по поводу "нужного десктопа".

Спасибо!
09.05.2014 11:12
OlegON
 
Попробуй все же из под юзера пускать, а не "вне зависимости от регистрации".
09.05.2014 12:29
KirillHome
 
Да что-то странное происходит.
Переделал чуть-чуть обработку - что бы она мне не только выходной файл создавала, но и хоть какую-то диагностику давала.
Пользователь, из под которого запускается - не залогинен на данном сервере.
Принудительно запускаю в планировщике - всё запускается, даёт и диагностику, и выходной файл, и 1с нормально завершается.
Возвращаю старую обработку - и тоже всё хорошо.

Вообще вышел с этого сервера, поставил в планировщике время на 11-40 - опять не работает.

Всё, разобрался, дело всё же в 1с и в моей голове.

В каталоге пользователя лежит ini-файл, необходимый для данной обработки.
Обращение к каталогу пользователя из 1с идёт через WSHSell
Код:
WSH=Новый COMobject("wscript.shell");
Объект.РеквизитИмяIniФайла = "" + WSH.ExpandEnvironmentStrings("%HomePath%") + "\MyIni.ini";
Если пользователь залогинен, то тогда его домашний каталог 1с понимает как
\Users\Пользователь

А если не залогинен, то, не смотря на явное указание пользователя, от которого запускается, домашний каталог 1с понимает как
%HomePath%\
Т.е. не инициируется системная переменная.

Мои ошибки:
1) Неправильно проверял существование ini-файла. Собственно, поэтому задание и "висело" (хотя странно, что оно не завершалось по таймеру).
2) Вместо ExpandEnvironmentStrings("%HomePath%") правильнее было использовать ExpandEnvironmentStrings("%UserProfile%") - первый вариант при невошедшем пользователе не инициализируется, а второе - инициализируется.

Всё.
Тему можно закрывать.
Всем спасибо за участие!
Опции темы


Часовой пояс GMT +3, время: 17:42.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.