如何通过ssh将在远程计算机上启动的进程定向为使用某个umask运行?我希望这也适用于作为标准Capistrano配方的一部分运行的命令,所以我不能只是显式调用命令的“umask”部分。
似乎没有读取远程机器上的〜/ .bash_profile,而是Capistrano调用远程命令的方式。
答案 0 :(得分:3)
我遇到了同样的问题,并在SSHKit.config.umask
中使用当时未记录的config/deploy.rb
来解决这个问题。请注意,这将为每个ssh命令设置umask
。
答案 1 :(得分:2)
将 umask 0002 放入您用于部署的用户帐户的 .bashrc 。
答案 2 :(得分:0)
同意Alain - 在.bashrc
而不是.bash_profile
中设置umask。在典型设置中使用Capistrano进行部署时,默认情况下不会加载.bash_profile
。阅读the difference between .bashrc and .bash_profile将有助于理解两者的目的。
我在.bashrc
文件中设置了环境变量,当我部署或运行任何其他带有capistrano的命令时,它们肯定会被使用。
另一个选项是在开始在部署上创建文件之前创建一个设置umask值的任务。例如,在第3章中,您可以使用:
task :set_umask do
on roles(:all) do |host|
execute "umask 0002"
end
end
before "deploy:starting", "set_umask"
答案 3 :(得分:0)
@ beauby使用SSHKit的答案很好,但它仅适用于Capistrano 3,因为Capistrano 2不使用SSHKit。
与umask
和Capistrano相关的常见问题是bundle install
安装具有过于严格限制的权限的gem。对于这个具体问题,我为Capistrano 2找到的解决方案是:
namespace :bundle do
task :postinstall do
run "chmod -R u=rwX,go=rX #{bundle_dir}"
end
end
after 'bundle:install', 'bundle:postinstall'