2016-03-01 6 views
1

Мое намерение:Найти недавно измененные файлы и управлять выходной

  1. Найти файлы, которые были изменены в течение последних 2-х дней.

  2. Получить последние 500 строк (поскольку файлы журнала приложений являются большими) каждого из этих файлов.

  3. Поместите каждый выход хвоста в другой файл (так как мне нужно загрузить его на удаленную машину).

Затем я загружаю эти файлы с удаленного компьютера на локальную машину с использованием Python Fabric.

Умеет 1 и 2 с помощью: find /opt/tomcat/logs -mtime -2 -exec sudo tail -500 '{}' \;

Умеют 2 и 3 с помощью: 'sudo tail -500 ' + filename + ' | sudo tee ' + logfilename + '_tail'

Как я могу получить 1, 2 и 3 выполнены в 1 самой команде?

Мне нужно это в команде 1, поскольку я использую Python sshcon.exec_command() для этого на удаленной машине.

+0

Напишите сценарий оболочки и вызовите его из Python. – Psytho

+0

Мне нужно сделать операцию над несколькими серверами ... проще, чем загружать сценарий оболочки на каждый сервер? –

ответ

0

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

Затем запустите его с помощью модуля подпроцесса.

Убедитесь, вы обжигающе сценарий оболочки, а subprocess.call()

import subprocess 
subprocess.call("sshpass -p pass ssh -o StrictHostKeyChecking=no \ 
       us[email protected]_server_ip 'bash -s' < your_script.sh ",shell=True) 

Допустят, у вас есть test_script.sh сценария, и вы хотите, чтобы запустить его на три сервере (1.2.3.4, 1.2.3.5, 1.2.3.6). Теперь этот подход должен быть:

import subprocess 
servers = [1.2.3.4, 1.2.3.5, 1.2.3.6] 
for server in servers: 
    subprocess.call("sshpass -p password ssh -o StrictHostKeyChecking=no \ 
      [email protected]{0} 'bash -s' < test_script.sh ".format(server),shell=True) 

Это будет более чем достаточно, чтобы достичь своей цели, при условии, что вы установили sshpass.

+0

Мне нужно делать такую ​​операцию на нескольких серверах ... проще, чем загружать сценарий оболочки на каждый сервер? –

+0

Вам не нужно загружать сценарий оболочки на каждый сервер в моем вышеприведенном подходе. Вы можете увидеть обновленный ответ. –

+0

Аргумент 'call' - это единственная команда; вам следует сделать так, чтобы сделать это в списке и потерять icky 'shell = True'. – tripleee