Как удаленно выполнять и контролировать длительный процесс и просматривать вывод до его завершения

Как я могу выполнить процесс на удаленной машине и просмотреть стандартный вывод до завершения процесса? ssh идеален, но выводит отчет только после завершения удаленной команды.

пример сценария Python, как это:

#!/usr/bin/python3
import time

tStart = time.time()
elapsedTime=0

while elapsedTime<10000:
    time.sleep(2)
    elapsedTime = time.time() - tStart
    print('elapsed time: {0:6.2f}(s)'.format(elapsedTime))

генерирует вывод, указывающий на его прогресс:

elapsed time:   2.00(s)
elapsed time:   4.00(s)
elapsed time:   6.00(s)
elapsed time:   8.00(s)
...

Я хотел бы запустить это на удаленной машине с ssh:

ssh vector /home/comperem/myProc.py

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

Как я могу получить SSH или что-то подобное, чтобы запустить команду удаленно и сообщить stdout на локальную консоль, как она генерируется, до завершения удаленного процесса? Вывод после каждой строки будет полезен.

1 ответ

ssh vector /home/comperem/myProc.py

Когда вы вызываете удаленную программу через ssh таким способом, удаленный процесс по умолчанию запускается без TTY. Вместо этого он подключен к серверу ssh через набор каналов. Ваша программа на Python, вероятно, буферизует свой вывод, потому что пишет в канал, а не в TTY.

Самое простое исправление для вашей программы - сбросить вывод. В этом вопросе обсуждается, как получить скрипт Python для сброса стандартного вывода. Я не программист на Python, но похоже, что это должно работать:

while elapsedTime<10000:
    time.sleep(2)
    elapsedTime = time.time() - tStart
    print('elapsed time: {0:6.2f}(s)'.format(elapsedTime), flush=True)
                                                         ^^^^^^^^^^^^

Другой вопрос обсуждает другие способы сделать это.

Вы можете решить свой вопрос с помощью daggy:

  1. Создать конфигурацию агрегирования данных config.yaml нравится:
aliases:
 - &myProc
   name: myProc
   command: tail -f /home/comperem/myProc.py
   extension: log
 - &auth_ssh
   login: user
   password: password

sources:
   host1:
     type: ssh
     connection:
       *auth_ssh
     host: 192.168.1.10
     commands:
       - *myProc
    hostN:
     type: ssh
     connection:
       *auth_ssh
     host: 192.168.1.N
     commands:
       - *myProc
  1. Пробег daggy -o my_proc_folder config.yaml
  2. Пробег tail -f my_proc_folder/*
Другие вопросы по тегам