У меня есть требование, при котором я должен собирать статистику перезагрузки для нескольких машин в моей среде.Я использую fabric
для множества других задач, и поэтому я хотел сделать это также с fabric
.Ниже приведен мой код.
from fabric.api import *
env.hosts = ['testbox']
@task
@parallel
def runner():
run("last -xF|awk '{print $6$8}'|head -10")
execute(runner)
Вывод
[testbox] Executing task 'runner'
[testbox] run: last -xF|awk '{print $6$8}'|head -10
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
[testbox] out: 32018
Однако, если я изменю свой код на приведенный ниже, он больше не будет работать
from fabric.api import *
env.hosts = ['testbox']
@task
@parallel
def runner():
run("last -xF|awk '/boot/{print $6$8}'|head -10")
execute(runner)
Вывод
[testbox] Executing task 'runner'
[testbox] run: last -xF|awk '/boot/{print $6$8}'|head -10
Я не уверен, почему это происходит, я тоже пытался избежать \
, но даже это не сработало.Как примечание, приведенная выше команда прекрасно работает в bash.
То же самое происходит и с grep
.
from fabric.api import *
env.hosts = ['testbox']
@task
@parallel
def runner():
run("last -xF|grep boot")
execute(runner)
Вывод
Fatal error: run() received nonzero return code 1 while executing!
Requested: last -xF|grep boot
Executed: /bin/bash -l -c "last -xF|grep boot"
Aborting.
Edit 1
Я отлаживал больше в нем и обнаружил, что проблема не в fabric
, а в ssh
самом соединении.Поэтому я больше изучаю его и обновлю, как только он будет готов.