Как я узнаю в Windows о сервисе, написанном на Python?

В другом вопросе, который я опубликовал вчера, я получил очень хороший совет о том, как сценарий Python можно запускать как службу в Windows. Меня интересует, как Windows узнает о службах, которыми можно управлять с помощью встроенных инструментов (окно "Службы" в "Средства администрирования"). И. е. что такое эквивалент Windows для размещения скрипта запуска / остановки в /etc/init.d под Linux?

4 ответа

Решение

Как и в случае большинства "осведомленных" вещей в Windows, ответом является "Реестр".

Взгляните на эту статью базы знаний Microsoft: http://support.microsoft.com/kb/103000

Найдите "Win32-программу, которая может быть запущена контроллером служб и подчиняется протоколу управления службами". Это тот вид услуг, который вас интересует.

Регистрация службы (содержимое KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \myservice) содержит информацию о службе, включая такие вещи, как расположение исполняемого файла, что делать в случае сбоя (остановка ОС?), Какие службы должны быть запущены перед этой. от имени какого пользователя.

Что касается протокола управления службами, main() вашей программы должен вызывать вызов Windows API, настраивая обратные вызовы для запуска, остановки, приостановки для вашей службы. То, что вы делаете в этих обратных вызовах, зависит только от вас.

Не копайтесь в реестре напрямую. Используйте инструмент командной строки SC. А именно, SC CREATE

    ОПИСАНИЕ:
        SC - программа командной строки, используемая для связи с
        NT Service Controller и сервисы.
    ИСПОЛЬЗОВАНИЕ:
        sc  [команда] [имя службы]  ...

        Опция имеет вид "\\ServerName"
        Дополнительную справку по командам можно получить, набрав: "sc [command]"
        Команды:
          запрос ----------- Запрашивает статус для службы, или
                          перечисляет статус по видам услуг.
          queryex--------- Запрашивает расширенный статус для службы, или
                          перечисляет статус по видам услуг.
          начать ----------- Запускает службу.
          пауза ----------- Отправляет запрос управления PAUSE в службу.
          опросить ----- Посылает запрос управления INTERROGATE в службу.
          продолжить -------- Посылает запрос управления ПРОДОЛЖЕНИЕ в службу.
          остановка ------------ Отправляет запрос на остановку в службу.
          config---------- Изменяет конфигурацию службы (постоянная).
          description----- Изменяет описание услуги.
          сбой --------- Изменяет действия, предпринятые службой при сбое.
          qc-------------- Запрашивает информацию о конфигурации для службы.
          qdescription---- Запрашивает описание услуги.
          qfailure-------- Запрашивает действия, предпринятые службой при сбое.
          удалить ---------- Удаляет службу (из реестра).
          создать ---------- Создает сервис. (добавляет его в реестр).
          control--------- Отправляет элемент управления в службу.
          sdshow---------- Отображает дескриптор безопасности службы.
          sdset ----------- Устанавливает дескриптор безопасности сервиса.
          GetDisplayName- получает DisplayName для службы.
          GetKeyName------ Получает ServiceKeyName для службы.
          EnumDepend------ Перечисляет сервисные зависимости.

        Следующие команды не требуют имени службы:
        Южная Каролина   
          boot------------(ok | bad) Указывает, должна ли последняя загрузка
                          быть сохранены как последняя известная хорошая конфигурация загрузки
          Lock------------ Блокирует сервисную базу данных
          QueryLock------- Запрашивает LockStatus для базы данных SCManager
    ПРИМЕР:
        sc start MyService

Вот код для установки python-скрипта как сервиса, написанный на python:)

http://code.activestate.com/recipes/551780/

Этот пост также может помочь вам:

http://essiene.blogspot.com/2005/04/python-windows-services.html

Вы можете использовать srvany.exe из Windows NT Resource Kit для создания пользовательской службы, которая будет отображаться в инструментах администратора...

http://support.microsoft.com/kb/137890

Я использую этот метод для запуска tracd (скрипт / сервер python) для trac.

Вот несколько очень четких инструкций: http://www.tacktech.com/display.cfm?ttid=197

Это требует некоторого редактирования реестра (очень минимального и простого), но позволит вам сделать любую командную строку / скрипт службой Windows.

Другие вопросы по тегам