Я использую Paramiko для tail -f
файла на удаленном сервере.
Раньше мы запускали это через ssh -t
, но это оказалось flaky, а -t
вызвало проблемы с нашей системой удаленного планирования.
Мой вопрос: как убить хвост, когда script ловит SIGINT?
My script (на основе Долгосрочные команды ssh в модуле python paramiko (и как их закончить))
#!/usr/bin/env python2
import paramiko
import select
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('someserver', username='victorhooi', password='blahblah')
transport = client.get_transport()
channel = transport.open_session()
channel.exec_command("tail -f /home/victorhooi/macbeth.txt")
while True:
try:
rl, wl, xl = select.select([channel],[],[],0.0)
if len(rl) > 0:
# Must be stdout
print channel.recv(1024)
except KeyboardInterrupt:
print("Caught control-C")
client.close()
channel.close()
exit(0)
script успешно завершает мой Ctrl-C и заканчивается. Однако он оставляет процесс tail -f
запущенным в удаленной системе,
Ни client.close(), ни channel.close(), похоже, не завершают его.
Какую команду я могу задать в блоке except, чтобы ее убить?
На удаленном сервере работает Solaris 10.