Батник перезапуска службы печати

Содержание:

Решение проблем печати на терминальном сервере Windows

Батник перезапуска службы печати

06 Мая 2018Блог- Сисадмину на заметку

Чаще всего эти проблемы случаются из-за того что в сети установлены принтеры разных производителей, с разными драйверами. В результате останавливается диспетчер очереди печати на терминальных серверах Windows.Также операционки разных разрядностей, те 32bit и 64bit. Также подобное поведение в большей мере проявляется у USB принтеров, в меньшей мере у сетевых.

Рассматривать установку драйверов не будем — разберемся со службой печати. Данный мануал подойдет как для Windows 2008 и выше, так и для windows 7.

Перезапуск службы печати в Windows

Данная служба называется print spooler. Для чего может потребоваться выполнить перезапуск службы печати? Бывает так, что в какой-то момент  очередь печати принтера просто забивается, особенно если печать ведется через сервер терминалов.

Как перезапустить службы печати Windows через оснастку службы

Открываем — Пуск — Панель управления

Далее ищем пункт — Администрирование — Службы

либо нажимаем win+R,открыв командную строку — пишем services.msc и жмем enter. У вас откроется оснастка Службы.

Находим нашу с вами службу, а именно Диспетчер печати, видим, что статус у нее сейчас Работает.

Щелкаем правым кликом и из контекстного меню выбираем Перезапустить.

Служба перезапустится и ваш принтер вероятно, начнет снова печатать.

Как перезапустить службы печати Windows  через консоль.

Открываем cmd через Пуск.

И пишем в нем две команды:

net stop spoolernet start spooler

Как очистить очередь печати принтера (Windows)

Проблема: документы не удаляются из очереди, причем не помогает ни отключение принтера, ни перезагрузка компьютера.

В этом случае используем жесткий метод очистки, описанный ниже.

Необходимо открыть командную строку, запущенную от имени администратора, и выполнить следующие команды:

net stop spoolerdel %systemroot%system32spoolprinters*.shddel %systemroot%system32spoolprinters*.splnet start spooler

Для ленивых Cmd файл в архиве remove_printer_jobs.zip217 Байт. (Запускать от имени Администратора)

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

Причины этих проблем разделим следующим образом.

  • Неидентичные версии драйверов на клиентской машине и на терминальном сервере.
  • Нестабильность драйверов в терминальной среде.
  • Высокая нагрузка на службу «диспетчер очереди печати»
  • Отсутствие работоспособных драйверов для терминальных серверов.

Версии драйверов.

Драйверы различных версий на сервере и клиентских машинах (в общем, то это первое, что нужно проверить) должны быть идентичны в т. ч. и с точки зрения версии PCL. Если версии отличаются то, скорее всего печати нам не видать.

Также можно отметить, что когда стоит выбор использовать PCL5 или PCL6, лучше устанавливать драйверы PCL5, т.к. на практике они работают стабильнее.

PCL6 возможно пригодится для печати векторной графики, но в офисах, где печатаются в основном текстовые документы, он не так актуален.

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

Нестабильная работа драйверов и, соответственно, перегрузка ими диспетчера очереди печати (по русски – «спулера») вызывала (и будет вызывать, если не чего не делать), остановку всего процесса печати на сервере, а иногда и остановку (зависание) ОС сервера в целом.

До выхода Windows Server 2008, штатных средств по оптимизации нагрузки спулера в ОС Windows Server не было.

Поэтому единственным адекватным методом борьбы с регулярным зависанием спулера (и соответственно, массовыми звонками в тех. поддержку от разгневанных пользователей), был bat-ник, по расписанию превентивно перезапускающий процесс spoolsv.exe (например, утром и в обеденное время), освобождая спулер от висящих запросов и очередей.

С выходом Windows Server 2008 и Windows 7 появилась возможность изоляции драйверов принтера. Данная возможность позволяет драйверу принтера подгружать задачи не в Spoolsv.exe, а специальный под-процесс PrintIsolationHost.exe.

При такой конструкции, зависание драйвера одного принтера, не вешает всю очередь печати, поскольку встает только один под-процесс PrintIsolationHost.exe, а сам процесс спулера spoolsv.exe остается работоспособным.

Теперь пару слов о настройке. Диспетчер печати по умолчанию выполняет драйверы печати в изолированном процессе. Изменить можно при помощи групповой политики, параметр «Выполнять драйверы принтеров в изолированных процессах» .

Также важен еще один параметр групповой политики это – «Переопределить параметр совместимости выполнения драйвера печати«

Для того чтобы включить изоляцию драйверов принтеров, нужно использовать редактор локальной групповой политики (gpedit.msc):

Откройте gpedit.msc и последовательно перейдите:

Параметры компьютера (Computer Configuration) -> Административные шаблоны (Administrative Templates)-> Принтеры (Printers).

Среди перечня политик нужно включить следующие:

Выполнить драйверы принтеров в изолированных процессах (Execute print drivers in isolated processes)

Переопределить параметр совместимости выполнения драйвера печати, назначенный драйвером печати (Override print driver execution compatibility setting reported by print driver)

К сожалению, данная функция никак не решит проблему отсутствия работоспособных драйверов для терминальных сред или слишком высокой нагрузки на спулер (например, когда на сервере установлены 10-ки разных драйверов разных устройств).

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

В ситуации, когда с терминального сервера необходимо печатать на 10-ках различных печатающих устройствах (в зоопарке из принтеров, если быть точнее), многие из которых не имеют рабочих драйверов для терминалов, следует применять функцию TS Easy Print.

TS Easy Print и сторонние решения вроде коммерческого продукта ScrewDrivers — в данном материале не рассматриваются.

Возвращаем поддержку CUDA на картах Nvidia ниже GTX-6XX →

Свобода Telnet

Батник перезапуска службы печати

15.04.2001 Дуглас Тумбс

Все базы заняты, начинается седьмая подача, а счет равный. Идет один из тех захватывающих бейсбольных матчей, которые хочется непременно, во что бы то ни стало, досмотреть до конца. Если, конечно, на пейджер не придет сообщение о неполадках в офисной сети.

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

Однако, когда я нахожусь не в офисе, у меня просто нет под рукой средств дистанционного управления и соединения с Internet.

Так что же делать, если администратору необходимы мощные средства удаленного доступа при отсутствии канала связи с хорошей пропускной способностью? На помощь приходит Telnet.

Telnet

Telnet — протокол на базе TCP/IP, появившийся в эпоху IBM и ставший важнейшей частью большинства систем UNIX.

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

В случае с UNIX нужно было ввести команду с консоли (экран и клавиатура), подключенной непосредственно к системе, или во время сессии через сеть — а для этого необходимо организовать в сети сеанс с использованием Telnet.

Чтобы понять, как работает Telnet, можно представить себе пользователя, который сидит за клавиатурой DOS-компьютера и вводит команды, отображаемые на экране. Такая организация взаимодействия с машиной равноценна доступу с консоли.

Если пользователь, сидящий за другими экраном и клавиатурой, может обратиться к данному компьютеру через сеть и запустить свой сеанс DOS, то этот сеанс будет равноценен доступу к системе по Telnet.

С помощью Telnet администраторы UNIX могут дистанционно управлять компьютером, как если бы они сидели перед ним и имели полный доступ к его консоли.

В игру вступает Microsoft

Telnet появился на заре сетевых технологий, но в течение ряда лет Microsoft не использовала в Windows инструментарий на базе UNIX.

Разработчики проектировали системы Windows, полагая, что пользователи будут управлять ими через графический интерфейс Microsoft.

Со временем стало очевидно, что многие администраторы нуждаются в системах из командной строки и средствах удаленного управления системами. Такую возможность как раз обеспечивает сервер Telnet, входящий в состав Windows 2000 Server и Windows 2000 Professional.

Установка и конфигурирование Telnet

Сервер Telnet позволяет организовать два соединения с любой системой Windows 2000. Если требуется больше двух соединений, нужно купить пакет Microsoft Services for UNIX-SFU.

Когда администратор устанавливает соединение с сервером Telnet и регистрируется, сервер предоставляет ему командную строку на целевой машине.

В ответ на приглашение можно вводить команды системы Windows 2000, управляя компьютером на расстоянии.

По умолчанию, функции Telnet операционной системы Windows 2000 отключены, так как активизация службы Telnet без ведома администратора может создать угрозу для безопасности. Поэтому службу должен запустить администратор, и параметры начального запуска можно изменить таким образом, чтобы служба Telnet активизировалась всякий раз в ходе начальной загрузки сервера.

Запустить службу Telnet можно с помощью меню StartProg-ramsAdministrative ToolsComputer Ma-nagement. В левой панели окна Computer Management, показанном на Экране 1, нужно развернуть поддерево Services and Applications, выбрать Servi-ces, а затем выделить Telnet в правом подокне.

Чтобы настроить службу Tel-net для запуска при загрузке сервера, следует изменить тип запуска с ручного на автоматический.

Экран 1. Запуск службы Telnet.

Чтобы убедиться в работоспособности Telnet после активизации службы, нужно ввести в командной строке

telnet localhost

Если служба Telnet настроена правильно, то на экране появится запрос команды или приглашение для аутентификации.

Стой! Кто идет?

Telnet — протокол изначально незащищенный. По умолчанию, сетевая аутентификация Telnet производится в чисто текстовом режиме. Это значит, что каждый, кто следит за сетью во время регистрации пользователя на сервере Telnet, может узнать его имя и пароль. Это может привести к серьезным последствиям — особенно если регистрируется пользователь с именем Administrator.

Чтобы устранить этот недостаток, разработчики Microsoft внесли изменения в версию Telnet в составе Windows 2000. Сервер Telnet в составе Windows 2000 может выполнять аутентификацию не только в текстовом режиме, но и в режиме NT LAN Manager (NTLM). NTLM шифрует имена пользователей и пароли, передаваемые через сеть, чтобы их нельзя было раскрыть.

Однако здесь есть одна тонкость. Чтобы использовать NTLM для аутентификации на сервере Telnet, необходим NTLM-совместимый клиент Telnet. Единственный клиент, обеспечивающий NTLM-аутентификацию, — это клиент Telnet фирмы Microsoft.

Поэтому, если предполагается обращаться к машинам с клиента Telnet Windows 2000, службу Telnet можно защитить, ограничив возможности аутентификации лишь режимом NTLM.

Но если организовывать сеансы Telnet с NTLM-несовместимых клиентов, придется понизить уровень безопасности.

Экран 2. Программа управления для настройки Telnet.

Чтобы изменить параметры аутентификации для службы Telnet, следует запустить из командной строки программу администрирования Telnet, tlntadmn.exe.

Из главного меню программы администрирования, показанного на Экране 2, нужно выбрать функцию Display/change registry settings (отобразить/изменить параметры реестра) и изменить параметры службы Telnet.

В результате на экране появляется меню, в котором следует выбрать пункт NTLM, чтобы изменить параметры аутентификации. В ответ на приглашение нужно ввести значение для аутентификации NTLM. Можно выбрать значения 0, 1 или 2.

Эти параметры конфигурирования нельзя назвать интуитивно понятными, поэтому их следует пояснить: если не предполагается когда-либо прибегать к аутентификации NTLM, следует выбрать значение 0, и служба Telnet не будет даже пытаться использовать режим NTLM.

Если нужно, чтобы служба Telnet попробовала NTLM, но затем вернулась к чисто текстовой аутентификации, следует выбрать значение 1. Данный режим стоит использовать, если к серверу будут подключаться клиенты, отличные от Windows 2000. Если планируется работать только в режиме NTLM (и, следовательно, только с клиентами Windows 2000 Telnet), следует выбрать значение 2, которое запрещает службе Telnet использовать чисто текстовую аутентификацию.

Защита службы Telnet

Прежде чем развернуть службу Telnet, следует изучить различные виды клиентов Telnet; почти каждая современная TCP/IP-совместимая система Windows, UNIX и Macintosh располагает клиентом Telnet.

Если система подключена к Internet, многие клиенты могут попытаться установить соединение с ней.

Если NTLM-аутентификация не обеспечивает достаточной безопасности, следует подумать о дополнительных мерах защиты.

Во-первых, необходимо защитить системы с помощью брандмауэра. Это позволит назначать правила, определяющие, кто может соединяться со службой Telnet, в какое время суток устанавливать соединение и с каких IP-адресов. Во-вторых, Telnet использует порт 23.

Если перевести ее на другой порт, то возможность удаленного администрирования сохранится, но получить доступ по Telnet к системам будет труднее.

Чтобы изменить порт службы Telnet, нужно запустить программу tlntadm, выбрать пункт Display/change registry settings, а затем пункт Telnet Port.

Конец седьмой подачи

Так как же успеть вернуться на бейсбольный матч до конца седьмой подачи? Очень просто: использовать миниатюрный беспроводный ПК (PDA) с установленным на нем клиентом Telnet. Как выяснилось, неполадки в сети были связаны с блокировкой службы спулинга. После перезапуска службы проблема была устранена, и мне не пришлось отходить от своего места на трибуне дальше чем на 30 м.

Подобные операции дистанционного управления можно выполнять через соединения любых типов (Internet или частное коммутируемое соединение), с любой машины, на которой установлен клиент Telnet.

Поскольку Telnet — универсальный протокол, он имеется почти на всех системах, даже на общедоступных Internet-терминалах в Internet-кафе и библиотеках.

Так как для Telnet не требуется канала с большой пропускной способностью, его можно рекомендовать как превосходный инструмент дистанционного администрирования.

Пять простых административных функций

Несмотря на большой выбор средств управления с графическим интерфейсом, которыми располагают операционные системы Microsoft, разработчики усовершенствовали функции командной строки Windows 2000. Например, из командной строки можно выполнить следующие типичные административные операции.

Смена пароля пользователя. Пользователи постоянно забывают пароли. До тех пор пока устройства биометрической аутентификации не получат широкого распространения, замена паролей будет оставаться ежедневной обязанностью администратора. Чтобы изменить пароль пользователя из командной строки, следует установить соединение с соответствующим сервером в сеансе Telnet и ввести команду

net user

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

Если соединение установлено с контроллером домена (DC) Active Directory (AD), то команда изменяет пароль пользователя в домене AD.

Чтобы изменить пароль для учетной записи домена, необходимо указать параметр /DOMAIN и имя домена.

Удаление задания на печать. Обычно принтеры не могут печатать по двум причинам (если только в принтере достаточно бумаги): задание на печать зависло или служба спулинга блокировала систему. Зная номер задания печати, зависшее задание можно освободить. Чтобы получить список заданий в очереди на печать, следует ввести с любой машины в домене следующую команду:

net print

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

net print /RELEASE

Данная команда освободит задание с указанным номером. Если команда /RELEASE не освобождает зависшее задание, можно попробовать команду /DELETE. Освобождая и уничтожая задания в очереди, следует подождать результатов операции примерно минуту.

Перезапуск зависшей службы. Службы Windows 2000 зависают по разным причинам. Чтобы выяснить их, лучше всего исследовать службу, но иногда в первую очередь необходимо вновь запустить ее.

Чтобы остановить и запустить службу Windows 2000 Server, нужно выдать команду Net Start в сеансе Telnet с сервером, на котором она зависла.

Если ввести команду Net Start без параметров, то система выдаст список всех служб, запущенных на системе; просмотрев этот список, можно выяснить, функционируют ли в сети основные службы. Для перезапуска отказавшей службы следует ввести команду Net Start с именем службы:

net start

При этом необходимо использовать сокращенное имя (например, W3SVC вместо Web Publishing Service или SPOOLER вместо Print Spooler). Краткие имена всех служб системы указаны в свойствах каждой службы. Рекомендуется составить список важнейших служб предприятия и хранить его в PDA.

Остановить службу можно с помощью команды Net Stop. Синтаксис данной команды напоминает синтаксис команды Net Start:

net stop

Чтобы остановить службу и запустить ее вновь, следует воспользоваться кратким именем службы и командой Net Stop, а затем ввести команду Net Start.

Изменение списка управления доступом (ACL) к файлу или каталогу. В процессе администрирования сети приходится предоставлять и запрещать доступ пользователей к файлам.

Обычно для этого изменяют разрешения на доступ к файлам с использованием графических утилит. Но то же самое можно сделать и с помощью утилиты командной строки — cacls.exe.

Установив через Telnet соединение с сервером, на котором нужно изменить полномочия, следует использовать следующий синтаксис:

cacls /T /E /G:permissions

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

Ключ /E указывает, что нужно не заменить, а отредактировать существующие списки ACL для файла или каталога. Ключ /G указывает на назначаемые полномочия: R — Read (чтение), W — Write (запись), C — Chan-ge (изменение), и F — Full Control (полный доступ).

Существует и множество других параметров Cacls; более подробную информацию о них можно получить, если ввести команду Cacls /?.

Перезапуск сервера. Иногда бывает необходимо перезапустить сервер.

Однако дистанционно этого лучше не делать: если во время перезагрузки машины возникнет проблема, то, вероятно, ее не удастся решить без физического вмешательства.

Если же перезагрузить компьютер все же необходимо, удаленно перезагрузить сервер через соединение Telnet следует с помощью утилиты shutdown.exe из комплекта ресурсов Microsoft Windows 2000 Resource Kit.

Финишная прямая

Telnet — превосходный инструмент для дистанционного управления системами Windows 2000.

Из командной строки всех проблем не решить, но с помощью команд Windows 2000 можно выполнять многие административные задачи.

Администраторам, нуждающимся в удобном средстве дистанционного администрирования систем — даже в разгар бейсбольного матча, — безусловно следует обратить внимание на службу Telnet.

Дуглас Тумбс — внештатный редактор журнала Windows NT Magazine. Имеет сертификаты MCSE, Compaq ASE и Novell CNA. С ним можно связаться по адресу: doug@netarchitect.com.

Поделитесь материалом с коллегами и друзьями

Перезапуск службы печати на удалённом ПК

Батник перезапуска службы печати

Недавно ко мне обратился человек с просьбой помочь в написании скрипта для перезапуска службы печати для того, чтобы очистить очередь печати от “застрявших” заданий – которые не печатаются, не отменяются и не удаляются. Мне это показалось банальным и скучным, поэтому я предложил сделать это сразу для удалённого компьютера.

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

Restart-Service spooler

Если службу нужно перезапустить на удалённом компьютере уже становится веселее, так как Restart-Service не умеет работать с удалёнными компьютерами. Впрочем, такой подход нам всё равно не подходит, так как не гарантирует очистку очереди печати.

Это ещё не всё, самое интересное впереди, но сначала…

Немного теории

Очередь печати – это файлы с расширениями

  • .SHD (содержит настройки задания печати)
  • .SPL (содержит, собственно, данные, которые нужно напечатать).

По умолчанию эти файлы находятся в каталоге %systemroot%System32spoolPRINTERS. “По умолчанию” как-бы намекает на то, что этот путь можно изменить. И нам для начала этот путь нужно было узнать, чтобы убедиться в том, что файлы очереди печати лежат здесь (наверное, бывало по другому).

Этот путь хранится в реестре, по адресу HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrintPrinters, ключ DefaultSpoolDirectory:

В идеале в этом каталоге ничего не должно быть, если только мы не отправляли недавно что-то на печать. Если же при печати возникали какие-либо сбои, здесь могут быть файлы, это те самые задания печати, которые нельзя удалить из очереди принтера. Удалить их отсюда как обычные файлы (через проводник, Powershell и т.д.) скорее всего не получится, так как они заняты службой печати.

Поэтому вырисовывается алгоритм:

  1. Остановить службу печати

  2. Определить путь к файлам очереди печати

  3. Удалить эти файлы

  4. Запустить очередь печати

Всё очень просто. Задача осложняется тем, что мы хотим это всё делать на удалённом компьютере.

Переходим к практике

Чтобы не загромождать статью, я не буду приводить кучу проверок (на то, что компьютер доступен, что у нас есть доступ к WMI и т.д.).

Итак, для начала нам нужно узнать путь к очереди печати, т.е. посмотреть значение реестра удалённого компьютера. Для этого используем .NET класс RegistryKey.

Для того, чтобы подключиться к реестру удалённого компьютера используем метод OpenRemoteBaseKey, передав ему в качестве параметров имя компьютера и раздел реестра:

$ServerKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey( [Microsoft.Win32.RegistryHive]::LocalMachine, $ComputerName)

Далее, пробираемся по интересующему нас пути, используя для полученного раздела метод OpenSubKey, задав ему в качестве параметра нужный подраздел:

$Key = $ServerKey.OpenSubKey('SYSTEMCurrentControlSetControlPrintPrinters')

Переменная $Key содержит весь подраздел Printers (на скриншоте выше). Нам из этого раздела нужно только одно значение:

$DefaultSpoolDirectory = $Key.GetValue('DefaultSpoolDirectory')

Переменная $DefaultSpoolDirectory содержит тот самый путь к файлам очереди печати:

PS C:> $DefaultSpoolDirectoryC:WINDOWSSystem32spoolPRINTERS

Отлично! Вот только появляется новая проблема: это локальный путь – по этому пути к удалённому компьютеру мы не доберёмся. Нужно преобразовать его в UNC-путь, т.е. из пути

C:WINDOWSsystem32spoolPRINTERS

получить путь

\ComputerNameC$WINDOWSsystem32spoolPRINTERS

Это можно сделать простой манипуляцией со строкой:

$RemoteDefaultSpoolDirectory = '\'+ $ComputerName + '' + $DefaultSpoolDirectory[0] + '$' + $DefaultSpoolDirectory.Substring(2)

Т.е. просто дописываем в строку (наш локальный путь) недостающие символы.

Теперь всё готово, можем останавливать службу и очищать очередь печати.

Останавливаем службу печати:

# Получаем службу$Service = Get-WmiObject Win32_Service @PSBoundParameters # Останавливаем службу$Service.StopService()

На всякий случай поясню – в данном случае при обращении к WMI используется сплаттинг, если такая форма кажется незнакомой и пугающей рекомендую почитать соответствующую статью, или воспользоваться более привычной формой:

$Service = Get-WmiObject Win32_Service ` -Filter «name = 'spooler'» ` -ComputerName $ComputerName

После остановки службы можно очищать очередь печати, но как известно аппетит приходит во время еды, и мне захотелось ещё посмотреть на то, сколько мусора там собралось:

# Если в очереди печати что-то естьif ($ContentSpoolDirecrory = Get-ChildItem $RemoteDefaultSpoolDirectory -Force){ # Считаем размер каталога с очередью печати $FolderSize = ($ContentSpoolDirecrory | Measure-Object -Property Length -Sum).Sum / 1Mb # Выводим «`nВ {0} находится {1} файл(а/ов), общим объёмом {2:N} МБ» -f $RemoteDefaultSpoolDirectory, $ContentSpoolDirecrory.Count, $FolderSize # Очищаем каталог $ContentSpoolDirecrory | Remove-Item -Force}

Вообще общепризнанным “best practice” не рекомендуется выводить простой текст в выводе скрипта, но так как это не было целью работы, и мне уже было лень с этим возиться, поэтому я просто воспользовался оператором –f.

Осталось только запустить службу:

$Service.StartService()

Если нужно перезапустить (остановить/запустить) другую службу, действия будут аналогичными, при необходимости можно имя службы и удалённого ПК засунуть в параметры, и запускать/останавливать/перезапускать любые службы на любых компьютерах

Автоматический перезапуск службы агента сервера 1С — скрипт + расписание

Батник перезапуска службы печати

Добрый день. Поступила заявка от 1С-ников, что необходимо ночью перезапускать службу агента сервера 1С на 8-ке.

Как многим известно, что данную службу просто так нельзя «перезапустить», иначе зависшие сессии так и остаются «висеть», ее необходимо сначала остановить, а после снова запустить.

Порывшись немного в интернете, пересмотрев кучу скриптов — собрал из многообразия один, не большой, полностью рабочий, уже оттестировал его на серверах, теперь выкладываю на ваше обозрение и пользование.

Скрипт перезапуска службы агента сервера 1С

В данном разделе я приведу скрипт .bat, который у меня получился, а так же дам краткое описание того, что за что отвечает в моем случае.

Собственно сам скрипт:

@echo off set logfile=»C:!Distrscriptstopstartlog.txt» echo %date% %time% >>%logfile% net stop «1C:Enterprise 8.3 Server Agent (1640)» >>%logfile% ping -n 16 localhost>Nul echo %date% %time% >>%logfile% net start «1C:Enterprise 8.3 Server Agent (1640)» >>%logfile% ping -n 301 localhost>Nul SetLocal EnableExtensions Set ProcessName=1C:Enterprise 8.3 Server Agent (1640) TaskList /FI «ImageName EQ %ProcessName%» | Find /I «%ProcessName%» If %ErrorLevel% NEQ 0 net start «1C:Enterprise 8.3 Server Agent (1640)» exit

Давайте рассмотрим его подробнее:

  1. Первым делом отключаем уведомления о выполнении, пусть это все работает в фоновом режиме
  2. Далее указываем где будет хранится наш лог-файл, куда будет писаться дата и время запуска и остановки службы (можно не писать лог, но на всякий случай пусть будет)
  3. Пишем в Лог дату и время начала остановки
  4. Останавливаем службу агента сервера, в моем случае она называется так — 1C:Enterprise 8.3 Server Agent (1640) и пишем ее статус в лог файл (ниже приведу пример что в логе появляется)
  5. Далее делаем задержку в 15 секунд, чтобы дождаться, пока служба останавливается (пинг равен примерно 1 секунде, первый проходит моментально, поэтому делаем время в секундах +1)
  6. Опять записываем в лог дату в время
  7. Запускаем службу обратно
  8. Делаем задержку в 5 минут, если служба не остановилась за 15 секунд, то она не запустится естественно, что то видимо зависло сильно и будем ждать 5 минут.
  9. Далее проверяем, запустилась ли служба и работает ли она? Если не работает, то выполняем ее повторный старт.
  10. Завершаем работу с cmd.

Все, вот такой вот получился скрипт. Я не программист, поэтому может он не совсем верный с точки зрения выполнения сценариев и программного кода, но для меня важно, чтобы это работало — а это работает! Данный скрипт у меня выполняется каждый день, каждый час с 00:00 до 7:00, но об этом позже.

Пример лог файла:

12.10.2017 0:00:00,10Служба «Агент сервера 1С:Предприятия 8.3 (1640)» останавливается…..Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно остановлена.12.10.2017 0:00:15,33Служба «Агент сервера 1С:Предприятия 8.3 (1640)» запускается.Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно запущена.

12.10.2017 1:00:00,15Служба «Агент сервера 1С:Предприятия 8.3 (1640)» останавливается….Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно остановлена.12.10.2017 1:00:15,37Служба «Агент сервера 1С:Предприятия 8.3 (1640)» запускается.

Служба «Агент сервера 1С:Предприятия 8.3 (1640)» успешно запущена.

Настройка выполнения *.bat по расписанию

Как я уже говорил выше, выполнение скрипта у меня происходит автоматически, каждый день он запускается ежечасно с 00:00 до 7:00. Сейчас я расскажу, как это сделано у меня.

Для начала идем в «Пуск -> панель управления -> Администрирование» и запускаем там «Планировщик заданий«.

Выбираем пункт «Создать задачу«:

На вкладке «Общие» задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.

Далее идем в закладку Триггеры и настраиваем, когда нам надо запускать задачу.  В моем случае это ежедневно выполнять в 00:00 и повторять ее каждый час в течении 7 часов.

Далее идем во вкладку Действия и создаем действие на выполнения скрипта.

Все, на этом все готово.  Как можем увидеть в журнале, задача с такими параметрами успешно выполняется и ровно то время, которое у нас задано в скрипте:

Заключение

Дорогие читатели, если вы увидели ошибку или опечатку в статье «Батник перезапуска службы печати», помогите нам ее исправить! Выделите ошибку и нажмите одновременно клавиши «Ctrl» и «Enter». Мы получим ваше сообщение и внесём исправления в ближайшее время.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: