だから私のパソコンでWebサーバーを同期していますが、ファイル権限に問題があります。
両方のコマンドを試しましたが、どちらも私が望むものを提供しません。
rsync -a --no-o --no-g --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ [email protected]:/var/www/mysite.com
rsync -a --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/mysite.com/ [email protected]:/var/www/mysite.com
ここに私が望むものと実際に何が起こっているのかについての説明があります。前述の2つのコマンドを使用して同じ効果を得ます。状況は次のとおりです。インデックスは、nginxを実行しているwww-dataユーザーが読むことができ、管理者が書き込むことができます。
-rw-r----- 1 admin-user www-data 127 M D mm:ss index.html
rsyncを実行した後に実際に起こるものは次のとおりです。
-rw-r----- 1 admin-user admin-user 128 M D mm:ss index.html
これにより、Webサイトにアクセスすると明らかに404が発生し、現在のrsyncを実行した後に権限を変更するためにスクリプトを実行する必要があります。
だから私が望むのは、rsyncを実行した後にサーバー上のファイルのGIDが変更されないことです。別のグループに設定する必要がある他のプログラムで使用される別のファイルがあるため、GIDを手動で指定するソリューションも機能しません。デフォルトでは、rsyncはファイルのデータを変更する必要がありますが、他に触れないでください。
私がログインしたユーザーがファイルに書き込むことができるので、スーパーユーザー権限も必要ありません。
OS: Ubuntu 16.04 Server and Desktop
rsync --version (home computer): 3.1.2 protocol version 31
rsync --version (server): 3.1.1 protocol version 31
答え1
rsyncが同じグループで更新されたファイルを生成するには、元々割り当てられた管理者がそのグループの一部である必要があります。
解決策は実行することです。
usermod -aG www-data admin-user
Webサーバーから。
試してみましたが、うまくいくようです。 rsyncには次のオプションを使用しています。
rsync -a --no-o --exclude='*.json' --exclude='venv/*' --exclude='*.sh' /var/www/site/ admin-user@remote:/var/www/site
これは元のコメントで@ Thomasが提案したものです。