Непрерывно запускать скрипт python, который развертывается с помощью Azure Pipelines и GitHub.

Я перенес forecasts.py файл из GitHub на свою виртуальную машину через Azure Pipelines. Если я запускаю скрипт из терминала виртуальной машины с python3 forecasts.py &, все идет гладко, и скрипт продолжает работать в фоновом режиме. По какой-то причине я получаю следующее сообщение от Azure Pipelines, если попытаюсь запустить этот скрипт аналогичным образом:

The STDIO streams did not close within 10 seconds of the exit event from process '/bin/bash'. This may indicate a child process inherited the STDIO streams and has not yet exited.

Полные журналы отладки можно найти здесь

Основное содержание forecasts.py следующее:

import schedule
import time

def job():
    print("I'm working...")

schedule.every().minute.at(":00").do(job)

while True:
    schedule.run_pending()
    time.sleep(5)

Этот сценарий должен печатать "Я работаю ..." раз в минуту. Стоит ли начинать скрипт другим способом?

ИЗМЕНИТЬ

azure-pipelines.yml может помочь решить эту проблему:

variables:
- name: system.debug
  value: true 

jobs:
- deployment: fmi_forecasts_deployment
  displayName: fmi_forecasts
  environment:
    name: AnalyticsServices
    resourceType: VirtualMachine
  strategy:
      rolling:
        maxParallel: 2  #for percentages, mention as x%
        preDeploy:
          steps:
          - download: current
          - script: echo initialize, cleanup, backup, install certs
        deploy:
          steps:
          - checkout: self
          - script: sudo apt install python3-pip
            displayName: 'Update pip'
          - script: python3 -m pip install -r requirements.txt
            displayName: 'Install requirements.txt modules'
          - script: rsync -a $(Build.SourcesDirectory) /home/ubuntu/$(Build.Repository.Name)/
            displayName: 'Sync files to $(Build.Repository.Name)'
          - task: Bash@3
            inputs:
              targetType: 'inline'
              script: python3 /home/ubuntu/$(Build.Repository.Name)/s/forecasts.py &
            displayName: 'Start the script'
        routeTraffic:
          steps:
          - script: echo routing traffic
        postRouteTraffic:
          steps:
          - script: echo health check post-route traffic
        on:
          failure:
            steps:
            - script: echo Restore from backup! This is on failure
          success:
            steps:
            - script: echo Notify! This is on success    

ИЗМЕНИТЬ

Я отредактировал файл forecasts.py, чтобы печатать "Спящий" ... каждые 5 секунд. И когда я выполню это с помощью nohup python -u /home/ubuntu/$(Build.Repository.Name)/s/forecasts.py &, я получу следующие журналы. Итак, скрипт работает, но когда я смотрю на запущенные процессы в виртуальной машине, никаких запущенных процессов python нет. Я полагаю, сценарий умирает, когда конвейер заканчивается.


person pentti    schedule 19.08.2020    source источник
comment
Как вы запускаете сценарий? Как выглядит ваш конвейер?   -  person Daniel Mann    schedule 19.08.2020
comment
Я добавил azure-pipelines.yml, где можно найти информацию.   -  person pentti    schedule 20.08.2020
comment
Конвейеры Azure предназначены для создания кода, а не для выполнения кода (навсегда).   -  person Wolfgang Kuehn    schedule 12.10.2020
comment
@WolfgangKuehn Знаете ли вы, с чего начать, какие технологии выбрать и т. Д., Чтобы мой код запускался автоматически при обновлении GitHub (или другого репо)? Я новичок в этой сцене, поэтому каждый совет полезен.   -  person pentti    schedule 10.11.2020


Ответы (1)


## [отладка] Задача была отмечена как выполненная, но процесс не закрылся через 5 секунд. Считать задачу выполненной.

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

Если вы хотите, чтобы этот скрипт продолжал работать в фоновом режиме, пока задача не будет завершена. Вы можете попробовать использовать команду start-process для запуска скрипта. Это гарантирует, что запущенное задание продолжит работу после завершения задачи. Но работа будет закрыта, когда сборка будет завершена.

Start-Process powershell.exe -ArgumentList '-file xxx\forecasts.py'

Для получения дополнительной информации см. Обходной путь в этом билет.

person Hugh Lin    schedule 20.08.2020
comment
Я предполагаю, что это могло бы работать в Windows. Экземпляр Ubuntu не распознает start-process. Вы знаете, что такое эквивалентный сценарий в Ubuntu? Возможно, удастся установить powershell и на ubuntu, но я бы предпочел этого не делать. - person pentti; 20.08.2020
comment
Как насчет способа, упомянутого в этом билет? - person Hugh Lin; 20.08.2020
comment
К сожалению, использование nohup python3 xxxx/forecasts.py привело к той же проблеме. - person pentti; 20.08.2020
comment
Помощь отсюда немного помогла, но не решила проблему. ссылка - person pentti; 20.08.2020
comment
Вы можете попробовать команду gnome-terminal -x bash -c "<my command or script>. Вот справочник. - person Hugh Lin; 21.08.2020
comment
-x устарел, но вместо этого я использовал --. Я получил следующую ошибку: Unable to init server: Could not connect: Connection refused # Failed to parse arguments: Cannot open display: Я не смог найти ответ с помощью быстрого поиска в Google. - person pentti; 24.08.2020