В целях тестирования я запускаю следующую команду с помощью простого инструмента командной строки 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
Это нормально работает на всех хостах. Но это не соответствует моему сценарию, потому что: