Я использую Python и Paramiko для запуска tail -f
на целой куче лог-файлов на удаленных серверах с помощью предыдущего потока:
Paramiko и exec_command - уничтожение удаленного процесса?
Мой окончательный сценарий выглядит примерно так:
#!/usr/bin/env python2
import paramiko
import select
import random
tail_id = random.randint(0,500)
username = 'victorhooi'
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('someserver.com', username='victorhooi', password='somepassword')
transport = client.get_transport()
#transport.set_keepalive(1)
channel = transport.open_session()
channel.exec_command("tail -%df /home/victorhooi/macbeth.txt" % tail_id)
while True:
try:
rl, wl, xl = select.select([channel],[],[],0.0)
if len(rl) > 0:
# Must be stdout
print channel.recv(1024).strip()
except KeyboardInterrupt:
print("Caught control-C")
client.get_transport().open_session().exec_command("kill -9 `ps -fu %s | grep 'tail -%df /home/victorhooi/macbeth.txt' | grep -v grep | awk '{print $2}'`" % (username, tail_id))
#channel.close()
#transport.close()
client.close()
exit(0)
Теперь мне нужно расширить это, чтобы справиться с фоном, управлять несколькими хвостами, а затем убивать определенные хвосты по требованию.
В идеале, у меня был бы один сценарий Python, который я мог бы раскрутить и задокументировать сам (или daemonize? Python-daemon?).Затем этот процесс может прочитать файл конфигурации и запустить отдельные вызовы paramiko для привязки каждого удаленного файла журнала.
У меня также был бы сценарий управления, который я мог бы запустить, чтобы вывести список запущенных удаленных хвостов, иубить определенных, или убить их всех, или остановить / перезапустить демон.
Какой хороший способ решения этой проблемы?Должен ли я использовать многопоточность или многопоточность или что-то еще для достижения каждого вызова Paramiko?Существуют ли какие-либо сценарии / программы, к которым я могу обратиться в качестве примера того, как это сделать?
И каков хороший способ взаимодействия сценария управления с каждым из процессов / потоков?
Ура, Виктор