1

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

Сама служба может быть остановлена вручную через консоль управления службами (щелкните правой кнопкой мыши -> Stop, щелкните правой кнопкой мыши -> Start).

Следующий пакетный файл, запускаемый двойным щелчком по файлу или через командную строку, работает практически мгновенно, успешно останавливает и запускает службу:

net stop "Service Name"
net start "Service Name"

Однако, когда я создаю запланированное задание для запуска этого пакетного файла каждые 30 минут, у меня возникают проблемы.

Когда я запускаю запланированное задание (щелкните правой кнопкой мыши -> Выполнить), служба, похоже, застревает в состоянии "Остановка" примерно на 2 минуты, а затем остается остановленной. Запланированное задание, похоже, не сообщает об ошибках и просто сидит в ожидании следующих 30 минут.

Это на Windows Server 2008 R2 и следующих параметрах запланированных задач:

  • Старт ежедневно в 08:00:00
  • Повторяйте каждые 30 минут до бесконечности
  • Если задача уже включена, не запускайте другую
  • Разрешить выполнение задачи по требованию
  • Если задача не выполняется, перезапускайте каждые 30 минут
  • Запуск от имени NT AUTHORITY\SYSTEM
  • Запускать, даже если пользователь не авторизован
  • Беги с самыми высокими привилегиями
  • Настроить для Windows 7, Windows Server 2008 R2

Я в растерянности, это известная проблема? Я делаю что-то неправильно? Единственный другой вопрос, который кажется похожим, вот этот: есть ли проблема с 64-разрядной службой остановки Windows 7?, но я не знаю, связана ли моя проблема, и я могу воспроизвести ее каждый раз (кажется, что она никогда не работает как запланированная задача, но работает нормально, если я просто запускаю пакетный файл сам)

Если вы можете придумать лучшее название вопроса, пожалуйста, не стесняйтесь менять!

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

ОБНОВЛЕНИЕ ПОСЛЕ ПРЕДЛОЖЕНИЙ

Итак, по какой-то причине служба слишком долго останавливалась, когда мой маленький пакетный файл запускался как запланированное задание, поэтому я написал следующий пакетный файл, который ожидает его остановки (спасибо @CoreTech за SC. Отлично, подсказка)

net stop "service name"

REM Wait for the service to stop (could take a minute or two...)
:loop_start
sc query "service name" | FIND "STATE" | FIND "STOPPED"
if errorlevel 1 goto :timeout_wait

REM Start the service again...
net start "service name"

goto :end

:timeout_wait
timeout 30
goto :loop_start

:end

Это работает нормально, но я до сих пор не знаю, почему поведение отличается от простой остановки службы вручную и настройки запланированной задачи :(

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ

После нескольких часов представления моей головы о соседней кирпичной стене * меня внезапно осенило, что в этом кольце печально известной смерти Windows Service ...

Участвуют две службы (я не упоминал об этом раньше, потому что не думал, что это актуально). Оказывается, что из-за неправильной конфигурации или, возможно, саботажа, обе службы пытаются подключиться через сеть к одному и тому же номеру порта ... Конфликт вызывал проблемы, которые в первую очередь приводили к необходимости перезапуска служб, и способствовал странному поведению при перезапуске служб. Как только я отключил один сервис и работал только с одним сервисом, все стало работать точно так, как ожидалось ... Мораль истории: не просто ищите решение, поймите проблему, и решение представится вам!

Я только что сделал это морально, это работа в процессе ...

* Я: «Голова, кирпичная стена; кирпичная стена, голова».

Голова: идет на рукопожатие, понимает, что у него нет рук ... чел ...

Мяу..."

Кирпичная стена: ничего не делает ... это кирпичная стена

0