Установка команды в фоновом режиме с помощью Fabric не работает на некоторых хостах

В целях тестирования я запускаю следующую команду с помощью простого инструмента командной строки ssh:

ssh user@host "nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &"

Это работает, как ожидалось, во всех мои хосты: в фоновом режиме создается процесс сна, и ssh немедленно завершается.

Я пытаюсь реализовать эту функциональность в Python с помощью Fabric. В итоге я выполняю вызов запустить . Вот что сообщает журнал Fabric:

[user@host] run: nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &

Это именно то, что я ожидал. Но если я проверю процессы, которые выполняются на моем хосте, sleep 100 не входит в их число. Что еще хуже: проблема возникает только на некоторых моих хостах.

Я также добавил дополнительную информацию, чтобы показать, какой процесс был создан, добавив "\ necho $!" к команде, запускаемой Fabric. Вот что было сообщено:

[user@host] run: nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &
echo $!
[user@host] out: 30935

У меня заканчиваются идеи о том, как это отладить, поскольку Fabric сообщает, что процесс был создан, но я не вижу ни одного процесса, работающего на другом конце. Системный журнал сообщает, что сеанс ssh открывается и закрывается:

Dec  6 09:12:09 host sshd[2835]: Accepted publickey for user from 67.133.172.14 port 37732 ssh2
Dec  6 09:12:09 host sshd[2838]: pam_unix(sshd:session): session opened for user user by (uid=0)
Dec  6 09:12:10 host sshd[2838]: pam_unix(sshd:session): session closed for user user

Могу ли я как-нибудь увеличить количество журналов, которые производит демон ssh, чтобы я мог видеть, по крайней мере, какая команда запрашивается через ssh?

I знаю, что у Fabric есть некоторые проблемы с запуском команд в фоновом режиме , но, похоже, это не моя проблема.Могут ли быть другие проблемы с Fabric / ssh / фоновыми процессами?

РЕДАКТИРОВАТЬ

Я установил dtach во всех своих системах. Версия, упакованная в Ubuntu 8.04, слишком старая и не позволяет вызывать dtach -n через ssh (проблемы с терминалом), поэтому мне пришлось загрузить и скомпилировать исходники dtach . После этого я смог выполнить свою команду вот так с Fabric:

[user @ host] run: dtach -n / tmp / Y sleep 100 >> / tmp / xxx 2> & 1

Это нормально работает на всех хостах. Но это не соответствует моему сценарию, потому что:

  • dtach создает два процесса: один для самого dtach, другой для выполняемого процесса.
  • Я не могу получить pid запускаемого процесса

16
задан dangonfast 6 December 2011 в 09:11
поделиться