我正在使用Python和Paramiko在远程服务器上的一大堆日志文件上运行tail -f
,在前一个帖子的帮助下:
Paramiko and exec_command - killing remote process?
我的最终脚本看起来像这样:
#!/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调用吗?是否有任何现有的脚本/程序可以查看如何执行此操作的示例?
让管理脚本与每个进程/线程进行通信的好方法是什么?
干杯, 维克多