Python перезапуск службы windows

Обновлено: 04.07.2024

У меня есть скрипт python, который перезапустит службу windows:

Мне нужно добавить еще несколько услуг.

Как бы я это сделал?

1 ответ

Какова наилучшая практика перезапуска системной службы ubuntu из программы python? Служба отвечает за запуск той же программы, из которой будет вызван перезапуск. Скрипт сервиса остановка,запуск и перезапуск методов. Предполагается, что метод stop убивает запущенные процессы, первоначально.

У меня есть служба Jboss в Windows server 2003. Есть ли способ запланировать автоматический перезапуск службы на ежедневной основе?

Если вы хотите каждый раз вводить их вручную, сделайте что-то вроде этого:

если вы хотите делать это автоматически каждый раз, когда вы запускаете функцию, делайте что-то вроде paidhima :

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

Похожие вопросы:

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

Как дистанционный перезапуск пула приложений служб IIS 7 Обратите внимание, что исходный компьютер и целевой компьютер работают под управлением IIS7 в windows 2008 Server R2, поэтому они должны.

Я хочу запланировать перезапуск моих пользовательских служб автоматически, используя batch file с net stop, net start. Когда net stop запускается, прерывает ли он что-либо, что делается немедленно.

Какова наилучшая практика перезапуска системной службы ubuntu из программы python? Служба отвечает за запуск той же программы, из которой будет вызван перезапуск. Скрипт сервиса остановка,запуск и.

У меня есть служба Jboss в Windows server 2003. Есть ли способ запланировать автоматический перезапуск службы на ежедневной основе?

Что такое ярлык для служб в Windows 7? Я могу попасть на службу двумя способами: a. запустите Диспетчер задач > перейдите на вкладку Службы b. Windows Explorer-щелкните правой кнопкой мыши на.

Cygwin bash часто предпочтительнее команды Windows' cmd shell, поэтому мы используем ее для настройки наших сред перед порождением Windows shell. Однако остановка выполнения запущенного процесса в.

что такое команда python для остановки и запуска служб windows. Я не могу использовать win32serviceutil, потому что использую последнюю версию python 3.6.

Может ли кто-нибудь объяснить, как я могу запустить или остановить службу windows с помощью программы узла? Не служба NodeJS, работающая на Windows, а именно сама служба Windows, и это тоже с.

Есть ли способ настроить перезапуск сервера windows на AWS в определенное время или дни? Например, каждую субботу в 3:00 делайте полную перезагрузку сервера. Разве это возможно?

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой . Это новая модель развертывания на основе Azure Resource Manager.

В этом руководстве показано, как программными средствами Python выполнять общие задачи управления службами. Класс ServiceManagementService в пакете SDK Azure для Python поддерживает программный доступ к большинству функций, связанных с управлением службами, которые доступны на портале Azure. Эти функции можно использовать для создания, обновления и удаления облачных служб, развернутых служб, служб управления данными и виртуальных машин. Эта возможность может быть полезна при создании приложений, которым требуется программный доступ к управлению службами.

Что такое управление службами?

API управления службами Azure обеспечивает программный доступ к большинству функций управления службами, доступных на портале Azure. Пакет Azure SDK для Python можно использовать для управления облачными службами и учетными записями хранения.

Чтобы использовать API управления службами, необходимо создать учетную запись Azure.

Основные понятия

Установка

Все функции, описанные в этой статье, доступны в пакете azure-servicemanagement-legacy , который можно установить с помощью pip. Дополнительные сведения об установке (например, если вы не работали с Python) см. в статье: Установка Python и пакета SDK.

Подключение к управлению службами

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

Теперь можно использовать сертификаты, созданные OpenSSL при работе в ОС Windows. Требуется Python версии 2.7.4 или более поздней. Корпорация Майкрософт рекомендует использовать OpenSSL вместо PFX-сертификатов, потому что поддержка PFX-сертификатов, скорее всего, будет удалена в будущем.

Сертификаты управления в Windows/Mac/Linux (OpenSSL)

Можно также использовать OpenSSL для создания сертификата управления. Необходимо создать два сертификата: один для сервера ( .cer -файл) и один для клиента ( .pem -файл). Чтобы создать .pem -файл, выполните следующую команду.

Чтобы создать .cer -файл сертификата, выполните следующую команду.

После получения идентификатора подписки, создания сертификата и отправки файла .cer в Azure можно подключиться к конечной точке управления Azure. Подключение достигается благодаря передаче объекту ServiceManagementService идентификатора подписки и пути к файлу .pem .

В предыдущем примере sms является объектом ServiceManagementService . Класс ServiceManagementService – это основной класс, используемый для управления службами Asure.

Управление сертификатами в Windows (MakeCert)

Вы можете создать самозаверяющий сертификат управления на своем компьютере с помощью программы makecert.exe . Откройте окно командной строки Visual Studio от имени администратора и используйте следующую команду, заменив AzureCertificate на имя сертификата, которое необходимо использовать.

Эта команда создает .cer -файл и устанавливает его в личное хранилище сертификатов. Дополнительные сведения см. в статье Certificates overview for Azure Cloud Services (Общие сведения о сертификатах для облачных служб Azure).

После получения идентификатора подписки, создания сертификата и отправки файла .cer в Azure можно подключиться к конечной точке управления Azure. Подключитесь, передав идентификатор подписки и расположение сертификата из личного хранилища сертификатов в ServiceManagementService (снова замените AzureCertificate именем вашего сертификата).

В предыдущем примере sms является объектом ServiceManagementService . Класс ServiceManagementService – это основной класс, используемый для управления службами Asure.

Получение списка доступных расположений

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

При создании облачной службы или службы хранения необходимо указать допустимое расположение. Метод list_locations всегда возвращает текущий список доступных расположений. На момент написания этой статьи были доступны следующие расположения:

  • Западная Европа
  • Северная Европа
  • Юго-Восточная Азия
  • Восточная Азия
  • Центральная часть США
  • Центрально-северная часть США
  • Центрально-южная часть США
  • западная часть США
  • Восточная часть США
  • Восточная Япония
  • Западная Япония
  • Южная Бразилия
  • Восточная Австралия
  • Юго-Восточная часть Австралии

Создание облачной службы

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

Вы можете создать список всех размещенных служб для вашей подписки при помощи метода create_hosted_service.

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

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

Удаление облачной службы

Облачную службу можно удалить, передав ее в метод delete_hosted_service.

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

Удаление развертывания

Чтобы удалить развертывание, используйте метод delete_deployment. В следующем примере показано, как удалить развертывание с именем v1 .

Создание службы хранения

Служба хранения предоставляет доступ к большим двоичным объектам, таблицам и запросам Azure. Для создания службы хранения требуется указать ее имя (длиной от 3 до 24 символов нижнего регистра, оно должно быть уникальным в пределах Azure). Также необходимо добавить описание, метку (не более 100 символов, автоматически кодируется в base64) и расположение службы. В следующем примере показано, как создать службу хранения путем указания расположения.

В описанном выше примере состояние операции create_storage_account можно извлекать путем передачи результатов, возвращенных create_storage_account, в метод get_operation_status.

Можно вывести список ваших учетных записей хранения и их свойств с помощью метода list_storage_accounts.

Удаление службы хранения

Чтобы удалить службу хранения, передайте ее в метод delete_storage_account. Удаление службы хранилища приводит к удалению всех данных, хранящихся в службе (больших двоичных объектов, таблиц и очередей).

Перечисление доступных операционных систем

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

Кроме того, можно использовать метод list_operating_system_families, который группирует операционные системы по семействам.

Создание образа операционной системы

Чтобы добавить образ операционной системы в репозиторий образов, используйте метод add_os_image.

Чтобы получить список доступных образов операционных систем, используйте метод list_os_images. Сюда входят все образы платформ и пользовательские образы.

Удаление образа операционной системы

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

Создание виртуальной машины

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

Удаление виртуальной машины

Чтобы удалить виртуальную машину, необходимо сначала удалить развертывание с помощью метода delete_deployment.

Затем можно удалить облачную службу с помощью метода delete_hosted_service.

Создание виртуальной машины из записанного образа виртуальной машины

Чтобы записать образ виртуальной машины, сначала вызовите метод capture_vm_image.

Чтобы убедиться, что образ записан успешно, используйте API list_vm_images. Убедитесь, что выбранный образ отображается в результатах.

Наконец, чтобы создать виртуальную машину с помощью записанного образа, используйте метод create_virtual_machine_deployment как раньше, но на этот раз передайте vm_image_name.

Дополнительные сведения о записи образа виртуальной машины Linux в классической модели развертывания см. в статье Запись классической виртуальной машины Linux в виде образа.

Дополнительные сведения о записи образа виртуальной машины Windows в классической модели развертывания см. в статье Запись образа виртуальной машины Azure Windows, созданной с использованием классической модели развертывания.

Дальнейшие действия

Теперь, когда вы ознакомились с основами службы управления, можно приступить к полной справочной документации по API для пакета SDK Azure Python и легко выполнять сложные задачи, управляя своим приложением Python.

он выдает ошибку, потому что sc не ожидает остановки службы. Как перезапустить сервис с помощью скрипта?

Постер хочет убедиться, что служба остановлена, прежде чем пытаться перезапустить ее. Вы можете использовать цикл вывода «sc query», выполняя что-то вроде этого:

Спасибо, в пакетном режиме нет сна, так что это все, что вы можете сделать, чтобы ждать :) +1 и значок GOTO. Присуждается тем, кто использует оператор GOTO с прямым лицом. В Windows Server 2008 уровень ошибки равен 0, если он найден, и 1, если он не найден. Поэтому мне пришлось инвертировать логику, и тогда это сработало.

Может быть, чего-то не хватает, но я все это время использую:

нет стоп "myservice"
нет старт "myservice"

нет остановки "myservice" && net start "myservice"

Умер просто с powershell:

Еще лучше, используя отображаемые имена:

Get-Help Restart-Service для большего

Если это чисто для перезапуска службы, вы можете использовать

Однако, если вы хотите получить доступ к опциям sc, вы можете использовать команду start / wait

эта техника является более общим решением, которое может быть применено к любой команде.

sc stop myservice просто отправит команду останова и вернется до остановки службы. Вызов sc с помощью start / b не поможет.

Чтобы выполнить тихий перезапуск какой-либо службы, которая запрашивает подтверждение об остановке (например, в качестве службы сервера), вы можете добавить / y в конец команды остановки.

Это было бы полезно для автоматического выполнения скрипта.

Если вы хотите перезапустить отказавший сервис, вам не нужно запускать скрипт. В оснастке MMC сервисов щелкните правой кнопкой мыши сервис, выберите свойства, перейдите на вкладку восстановления. Здесь вы можете указать, какие действия вы хотите предпринять в случае остановки сервиса. Существует много гибкости. Вам понадобится сценарий, если вы пытаетесь остановить службу, что-то сделать, затем запустить сценарий, предварять командный файл net stop "myserviceshortname" и завершить net start "myserviceshortname"

В vbscipt немного больше кода для остановки службы и ее зависимых элементов:

Я рисую архитектуру для набора программ, которые совместно используют различные взаимосвязанные объекты, хранящиеся в базе данных. Я хочу, чтобы одна из программ выступала в качестве службы, которая обеспечивает интерфейс более высокого уровня для операций над этими объектами, а другие программы - для доступа к объектам через эту службу.

В настоящее время я нацелен на создание Python и Django как технологий для реализации этого сервиса. Я почти уверен, что я понимаю, как демонизировать программу Python в Linux. Тем не менее, это необязательный элемент спецификации, который система должна поддерживать Windows. У меня мало опыта программирования Windows, и у меня нет опыта работы с службами Windows.

Можно ли запускать программы Python в качестве службы Windows (т.е. запускать ее автоматически без входа пользователя)? Я не обязательно буду реализовывать эту часть, но мне нужно понять, как это будет сделано для того, чтобы решить, следует ли разрабатывать эти строки.

Изменить: Спасибо за все ответы до сих пор, они довольно полные. Я хотел бы узнать еще одно: Как Windows знает о моем сервисе? Могу ли я управлять им с помощью родных утилит Windows? Что эквивалентно помещению start/stop script в/etc/init.d?

ОТВЕТЫ

Ответ 1

Да, вы можете. Я использую библиотеки pythoncom, входящие в состав ActivePython или могут быть установлены с pywin32 (расширения для Python для Windows).

Это базовый скелет для простой службы:

Ваш код будет идти в методе main() - обычно с каким-то бесконечным циклом, который может быть прерван проверкой флага, который вы установили в методе SvcStop

Ответ 2

Хотя я выделил выбранный ответ пару недель назад, тем временем я больше боролся с этой темой. Похоже, что у вас есть специальная установка на Python и использование специальных модулей для запуска script, поскольку сервис - это просто неправильный путь. Как насчет переносимости и т.д.

Я наткнулся на замечательный Non-sucking Service Manager, который сделал его очень простым и разумным для работы с Windows Services. Я понял, что, поскольку я мог передавать параметры установленному сервису, я мог бы просто выбрать исполняемый файл Python и передать мой script в качестве опции.

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

Ответ 3

Существует несколько альтернатив для установки в качестве службы практически любого исполняемого файла Windows.

Способ 1: Использовать instrrv и srvany из rktools.exe

Для Windows Home Server или Windows Server 2003 (также работает с WinXP), Windows Server 2003 Resource Kit Tools поставляется с утилит, которые могут для этого используется тандема, называемая instsrv.exe и srvany.exe. Подробнее о том, как использовать эти утилиты, см. В статье Microsoft KB KB137890.

Для Windows Home Server существует большая удобная оболочка для этих утилит с меткой "" Любой установщик услуг".

Способ 2. Использовать ServiceInstaller для Windows NT

Существует другая альтернатива, использующая ServiceInstaller для Windows NT ( скачать можно здесь) с доступные инструкции python. В отличие от имени, он работает как с Windows 2000, так и с Windows XP. Ниже приведены некоторые инструкции по установке python script в качестве службы.

Установка Python script

Запустите ServiceInstaller, чтобы создать новый оказание услуг. (В этом примере это предположил, что python установлен на C:\Python25)

После установки откройте Control Апплет Panel Services, выберите и запустите службу PythonTest.

После моего первоначального ответа я заметил, что были тесно связанные Q & A, уже опубликованные на SO. См. Также:

Ответ 4

Самый простой способ добиться этого - использовать встроенную команду sc.exe:

Рекомендации:

Ответ 5

Самый простой способ - использовать: NSSM - диспетчер служб несвязывания:

2 - установить программу python в качестве службы: Win prompt as admin

c:> nssm.exe установить WinService

3 - На консоли NSSM:

Каталог автозагрузки: C:\Python27

4 - проверить созданные службы на services.msc

Ответ 6

Пошаговое объяснение, как заставить его работать:

1- Сначала создайте файл python в соответствии с основным скелетом, упомянутым выше. И сохраните его на пути, например: "c:\PythonFiles\AppServerSvc.py"

2 - На этом этапе мы должны зарегистрировать наш сервис.

Запустите командную строку как администратор и введите:

sc создать TestService binpath = "C:\Python36\Python.exe c:\PythonFiles\AppServerSvc.py" DisplayName = "TestService" start = auto

первым аргументом binpath является путь файла python.exe

Второй аргумент binpath - это путь к вашему файлу python, который мы уже создали

Не пропустите, что вы должны поместить одно место после каждого знака < =.

Тогда, если все в порядке, вы должны увидеть

Теперь ваша служба python установлена ​​как служба Windows. Вы можете увидеть его в Service Manager и в реестре по адресу:

3- Хорошо. Вы можете начать свою службу в сервис-менеджере.

Вы можете выполнить каждый файл python, который предоставляет этот сервисный скелет.

Ответ 7

Я начал хостинг как сервис с pywin32.

Error 1053: The service did not respond to the start or control request in a timely fashion.

Error 7009: Timeout (30000 milliseconds) waiting for the <ServiceName> service to connect.

Я много боролся с pywin, но в итоге использовал NSSM, как было предложено в этом ответе. Было очень легко перейти на него.

Ответ 8

nssm в Python 3+

(Я преобразовал свой .py файл в .exe с помощью pyinstaller)

NSSM: как уже было сказано

На консоли NSSM:

путь: путь\к\вашему\program.exe

Аргументы: пусто

Ответ 9

Принятый ответ с использованием win32serviceutil работает, но сложен и усложняет отладку и изменения. Намного проще использовать NSSM (диспетчер неосасывающих услуг). Вы пишете и удобно отлаживаете обычную программу на Python, и когда она наконец работает, вы используете NSSM, чтобы установить ее как службу менее чем за минуту:

В командной строке с nssm.exe install NameOfYourService (admin) вы запускаете nssm.exe install NameOfYourService и вводите следующие параметры:

  • путь: (путь к python.exe, например C:\Python27\Python.exe )
  • Аргументы: (путь к вашему скрипту Python, например, c:\path\to\program.py )

Ответ 10

Возможно, это вызвано проблемой venv, потому что служба Windows запускает вашу службу с помощью exec PROJECT\venv\Lib\site-packages\win32\pythonservice.exe .

Вы можете использовать powershell или cmd чтобы протестировать свой сервис и найти более подробную информацию об ошибках.

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

Ответ 11

Создать и запустить сервис

Служба остановки и удаления

Читайте также: