1

Я настроил задачу в Windows Task Scheduler, чтобы она выполнялась в определенное время каждый день. Задача просто выполняет командный файл, который я создал, чтобы перезапустить мой сервис Windows. Это содержимое этого файла:

net stop "MyService"
net start "MyService"

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

Почему планировщик задач приостанавливает мой сервис, а не запускает его, и как я могу это исправить?

3 ответа3

1

Вы можете увидеть это, если вы использовали NSSM, чтобы сделать logstash сервисом, и вы обновили установку Java, так как создали файл .bat, который NSSM использует для запуска вашего сервиса, вы можете найти путь к java.exe в вашем Пакетный файл больше не действителен.

1

EXE, преобразованные в сервисы такими утилитами, как NSSM, чреваты вероятностью сбоя.

Даже NSSM указывает это на своей домашней странице:

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

Похоже, ваше приложение не "хорошо себя ведет".

Либо попробуйте с помощью NSSM остановить / запустить и перезапустить службу, либо, если это не поможет, переписать / перекомпилировать программу как реальную службу Windows.

1

Я считаю, что эта проблема была вызвана самой службой, но есть обходной путь с командой "SC query".

C:\Windows>sc query "MyService" | find "STATE"
    STATE              : 3  STOP_PENDING

Можно добавить подпрограмму проверки в ваш пакетный файл, чтобы дважды проверить состояние службы после некоторого интервала, убить процесс службы (taskkill /f), если он завис, и перезапустить службу (net start).

Кроме того, если вы используете NSSM, чтобы скрыть окно, вам не нужно использовать NSSM, и вы можете достичь той же цели только с помощью планировщика задач. (Но если вы стремитесь к чему-то другому - пожалуйста, игнорируйте следующее.)

свойство планировщика задач

Это часть вкладки "Общие" свойства задачи. Если вы выберете «Запускать независимо от того, вошел пользователь в систему или нет», он будет запущен из сеанса 0, который не покажет вам никакого окна. Тогда вам нужно выполнить запланированное задание, чтобы убить / перезапустить сам процесс назначения, как вы это делаете сейчас. Это будет работать более надежно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .