2013-06-01 4 views
1

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

(это означает, что команда заканчивает тем, что выполняется как/bin/команды Баш)

текущий код у меня есть следующие:

в файле kill.sh я есть

/bin/kill $(ps -ef | grep multiserver.jar | grep -v bin/sh | grep -v /bin/bash | grep -v sh | grep python | grep -v /usr/bin/java | grep -v /usr/bin/python | grep -v sh | awk '{print $2}') 

который я бегу в ткани на моем удаленном хосте, используя следующие команды

 local("scp " + "kill.sh " + user +"@" + server_address + ":" + directory) 
    run ("chmod u+x kill.sh") 
    run("./kill.sh") 

Однако я получаю следующее сообщение об ошибке

 out: Usage: 
     [] out: kill [options] <pid> [...] 


     Fatal error: run() received nonzero return code 1 while executing! 

    Requested: ./kill.sh 
    Executed: /bin/bash -l -c "cd ... && ./kill.sh" 

Кто-нибудь знает, что я делаю неправильно?

+0

Вполне вероятно, что команда 'ps -ef | grep multiserver.jar | grep -v bin/sh | grep -v/bin/bash | grep -v sh | grep python | grep -v/usr/bin/java | grep -v/usr/bin/python | grep -v sh | awk '{print $ 2}' 'ничего не возвращает и, следовательно,' kill'. У вас есть 'pkill', доступный на ваших серверах? – iruvar

+0

эта команда всегда вернет идентификатор grep-вызова, по крайней мере. и он также терпит неудачу, когда я вручную запускаю multiserver.jar, чтобы убедиться, что что-то есть. – user1018513

+0

Можете ли вы просто поместить всю команду в 'kill.sh' до вызова' kill' и посмотреть, что она выводит при вызове через 'Fabric' , У вас есть 'grep multiserver.jar', за которым следует' grep python' в командной строке. Я немного озадачен тем, какой процесс будет отвечать на эту комбинацию. – iruvar

ответ

5

При решении this issue с чтением журналов с тканью, я написал команду, чтобы убить удаленные процессы:

with settings(warn_only=True): 
    sudo("kill -9 `ps aux | <pipeline of greps> | awk '{print $2}'`") 

Надеется, что это помогает.

+0

Я пытаюсь убить процесс спящего сельдерея, но выше команды дает 'Предупреждение: sudo() получил ненулевой код возврата -1 при выполнении 'd = $ (ps -axf | grep celery | awk '{print $ 1}') && echo $ d && kill -9 $ d '! ' –

Смежные вопросы