如何通過ssh啓動遠程機器上的進程以使用某個umask運行?我希望這適用於作爲標準Capistrano食譜的一部分運行的命令,所以我不能只是明確地調用「umask」命令的一部分。設置遠程命令的umask
看起來,遠程計算機上的〜/ .bash_profile沒有被讀取,而Capistrano調用遠程命令的方式。
如何通過ssh啓動遠程機器上的進程以使用某個umask運行?我希望這適用於作爲標準Capistrano食譜的一部分運行的命令,所以我不能只是明確地調用「umask」命令的一部分。設置遠程命令的umask
看起來,遠程計算機上的〜/ .bash_profile沒有被讀取,而Capistrano調用遠程命令的方式。
我面臨的同樣的問題,並圍繞它通過了在config/deploy.rb
使用當時無證SSHKit.config.umask
。請注意,這將爲每個ssh命令設置umask
。
把umask 0002在您用來部署的用戶帳戶的.bashrc。
與Alain同意 - 在您的.bashrc
中設置umask而不是.bash_profile
。在典型安裝中使用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"
@ 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'
如果您使用'execute('some command')'語法,只需要說明這一點不起作用,您必須使用'execute(:some,'command')',以便通過[命令映射](https://github.com/capistrano/sshkit#the-command-map) – robd
這隻適用於Capistrano 3. Capistrano 2不使用SSHKit。 –
如何正確應用? –