Python pywin32 / nssm не может запустить службу - PullRequest
0 голосов
/ 06 ноября 2018

Мой скрипт / программа состоит из main.py; submethod1.py, submethod2.py в подкаталоге; второй подкаталог для временных файлов; Один TXT-файл для регистрации Я борюсь с тем, чтобы запустить его в качестве службы в течение недели.

PyWin32 дает мне Error 1053: The service did not respond to the start or control request in a timely fashion. NSSM просто пишет это Unexpected status SERVICE_STOPPED in response to START control и ничего в стандартный вывод Как понять, что не так с сервисом? Я не могу отладить это правильно. Он отлично работает автономно, я отлаживал его в IDE.

import configparser

from script.sql import *


def app():
    # reading .ini file
    print (os.getcwd())
    default_file = os.getcwd()+ r"/config.ini"
    config = configparser.ConfigParser()
    config.read (default_file)
    path = config.get ("XLS", "dir")
    file_1 = path + "\\" + config.get ("XLS", "workbook1")
    file_2 = path + "\\" + config.get ("XLS", "workbook2")
    file_3 = path + "\\" + config.get ("XLS", "workbook3")
    usr = config.get ("SQL", "user")
    pwd = config.get ("SQL", "password")
    hst = config.get ("SQL", "host")
    db = config.get ("SQL", "database")
    pt = config.get ("SQL", "port")
    ssl_cert = config.get ("SQL", "ssl_cert")
    ssl_ca = config.get ("SQL", "ssl_ca")
    ssl_key = config.get ("SQL", "ssl_key")
    enc = config.get ("SQL", "encoding")
    sql_config = "mysql+pymysql://" + usr + ":" + pwd + "@" + hst + ":" + pt + "/" + db + "?" + ssl_cert + "&" + \
                 ssl_ca + "&" + ssl_key + "&" + enc

    if (os.path.isfile (file_1) == True or os.path.isfile (file_2) == True or os.path.isfile (file_3) == True):

        SQL.sqlconnect (sql_config)

        if (os.path.isfile (file_1) == True):

            XLS.xls_wrk (file_1)
            df_xls_1 = XLS.table_xls (file_1)
            df_sql_1 = SQL.table_sql (file_1, sql_config)

            if (df_sql_1.equals (df_xls_1) == False):
                try:
                    SQL.sql_import (file_1, sql_config)
                except:
                    SQL.table_trunc (file_1, sql_config)

        if (os.path.isfile (file_2) == True):
            XLS.xls_wrk (file_2)
            df_xls_2 = XLS.table_xls (file_2)
            df_sql_2 = SQL.table_sql (file_2, sql_config)

            if (df_sql_2.equals (df_xls_2) == False):
                try:
                    SQL.sql_import (file_2, sql_config)
                except:
                    SQL.table_trunc (file_2, sql_config)

        if (os.path.isfile (file_3) == True):
            XLS.xls_wrk (file_3)
            df_xls_3 = XLS.table_xls (file_3)
            df_sql_3 = SQL.table_sql (file_3, sql_config)

            if (df_sql_3.equals (df_xls_3) == False):
                try:
                    SQL.sql_import (file_3, sql_config)
                except:
                    SQL.table_trunc (file_3, sql_config)

        SQL.con_close (sql_config)

    else:
        with open (os.getcwd () + r"\PyXLSQL.log", "a+") as text_file:
            print (f"{str(datetime.datetime.now()).split('.')[0]} - Excel workbooks not found in dir {path}",
                   file=text_file)
if __name__ == '__main__':
    app()

Я использовал рабочие шаблоны, такие как Все службы Python для Windows не могут запуститься {ошибка 1053}

Что может быть не так? Есть цикл, или я могу добавить его, чтобы проверить каталог на наличие файлов * xls в разделе RunSvc. Во всяком случае, никакой полезной информации отладки после попытки запустить его как службу.

UPDATE:

Debugging service PyTest - press Ctrl+C to stop.
Info 0x40001002 - The PyTest service has started.
Error 0xC0000003 - The instance's SvcRun() method failed

<Error getting traceback - traceback.print_exception() failed

(null): (null)

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

1 Ответ

0 голосов
/ 25 января 2019

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

Эта строка будет работать с NSSM:

f_name = '//Bm-app1/bmcapps/logs/Hourly_Scripts.log'

Эта строка не будет работать NSSM, но будет в файле py:

f_name = 'W: \ logs \ Hourly_Scripts.log'

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

...