Как удаленно выполнять и контролировать длительный процесс и просматривать вывод до его завершения
Как я могу выполнить процесс на удаленной машине и просмотреть стандартный вывод до завершения процесса? 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:
- Создать конфигурацию агрегирования данных
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
- Пробег
daggy -o my_proc_folder config.yaml
- Пробег
tail -f my_proc_folder/*