Переключение пользователя в Fabric

У меня проблема при использовании Fabric для имитации моего рабочего процесса SSH для развертывания моего веб-приложения.

Вот мой обычный поток команд, когда я SSH к серверу:

SSH с использованием пользователя root. ssh [email protected]Переключить на веб-пользователя: su - webИзменить каталог: cd / srv / web / prod / abc_projectЗапустите virtualenv: workon abc_envВыполнить git pull: мастер происхождения git pullЗапустите скрипт: build_stuff -m buildЗапустите другой скрипт: ./run

Я попытался написать это как скрипт развертывания в Fabric, и при входе в su-web я получаю вывод оболочки. Я должен нажать Ctrl-D, чтобы продолжить сценарий. Я также не могу активировать свой virtualenv .... потому что: su - web успешно переключает пользователя наweb но из-за Ctrl-d (чтобы я мог продолжить скрипт Fabric), он выходит из системы от этого пользователя и возвращается к корню.

Вот мой сценарий:

env.user = 'root'

@roles('web')
def deploy():
    dev_path = '/srv/web/prod'
    app_path = '/srv/web/prod/rhino'
    workon = 'workon rhino_env'
    with prefix('su - web'):
        puts('Switched to `web` user')
        with settings(warn_only=True):
            run('kill -9 `cat /srv/web/run/rhino/rhino.pid`')
            puts('Stopped rhino...')
        with cd(app_path):
            run('git reset --hard HEAD')
            puts('Discarded all untracked and modified files')
            run('git checkout master')
            run('git pull origin master')
            users = run('users')
            puts('Output from `users` command: %s' % users)
            run(workon)
            run('build_assets -m build')
        run('cd %(dev_path)s; chown -R web:ebalu rhino' % {'dev_path': dev_path})
        run('cd %(app_path)s; ./run' % {'app_path': app_path})
        pid = run('cat /srv/web/run/rhino/rhino.pid')
        puts('Rhino started again with pid: %s.' % pid)

... есть еще одна вещь: нет, я не могу войти в систему как веб, я должен войти как root. Это веб-пользователь, у которого есть virtualenv, а не пользователь root.

Ответы на вопрос(3)

Ваш ответ на вопрос