2014-01-30 3 views
4

Как я могу направить процессы, запущенные на удаленных машинах, через ssh для запуска с определенной umask? Я хочу, чтобы это применимо к командам, выполняемым как часть стандартных рецептов Capistrano, поэтому я не могу просто сделать явный вызов части команды «umask».Установить umask для удаленных команд

Не отображается, что ~/.bash_profile на удаленном компьютере читается, так как Capistrano вызывает удаленные команды.

ответ

2

я столкнулся с той же проблемой и получил вокруг него, используя то-недокументированные SSHKit.config.umask в config/deploy.rb. Обратите внимание, что для каждой команды ssh будет установлено значение umask.

+0

Просто примечание, чтобы сказать, что это не работает, если вы используете синтаксис 'execute ('some command')', вы должны использовать 'execute (: some, 'command')', чтобы он интерпретировался через [ command map] (https://github.com/capistrano/sshkit#the-command-map) – robd

+0

Это работает только для Capistrano 3. Capistrano 2 не использует SSHKit. –

+0

Как правильно применять? –

1

Помещенный UMASK 0002 в .bashrc учетной записи пользователя, которое используется для развертывания.

0

Согласен с Alain - установите umask в .bashrc вместо .bash_profile. При развертывании с Capistrano в типичной настройке ваш .bash_profile не загружается по умолчанию. Чтение на the difference between .bashrc and .bash_profile поможет понять цели этих двух. У меня есть переменные окружения, установленные в моем файле .bashrc, и они, безусловно, используются при развертывании или для запуска любых других команд с capistrano.

Другой вариант - создать задачу для установки значения umask перед началом создания файлов при развертывании. Например, в Cap 3, вы можете использовать это:

task :set_umask do 
    on roles(:all) do |host| 
    execute "umask 0002" 
    end 
end 
before "deploy:starting", "set_umask" 
+4

Ваше решение на основе capistrano, похоже, не работает. Однако установка SSHKit.config.umask = "0002" в config/deploy.rb делает трюк. – beauby

+1

@beauby о бог, и это не документировано ** в любом месте **. Позаботьтесь, чтобы ответить на этот вопрос? –

+0

@FelixFrank: Да, я помню, что мне было трудно найти ... Готово! – beauby

0

@ Ответ beauby с использованием SSHKit хорош, но он работает только для Capistrano 3, поскольку Capistrano 2 не использует SSHKit.

Общей проблемой в отношении umask и Capistrano является то, что bundle install устанавливает драгоценные камни с слишком строгими разрешениями. Для этой конкретной проблемы решение, которое я нашел для Capistrano 2, состоит в том, чтобы сказать:

namespace :bundle do 
    task :postinstall do 
    run "chmod -R u=rwX,go=rX #{bundle_dir}" 
    end 
end 

after 'bundle:install', 'bundle:postinstall' 
Смежные вопросы