← nitronium.dev
rsync -t, dosyaların sahibi farklı kullanıcıysa 'failed to set times' ile çıkış kodu 23 verir
2026-10-24
GitHub Actions'tan rsync ile deploy kurdum. Hedef klasörde dosyalar başka bir kullanıcıya aitti, deploy ise kısıtlı bir deploy kullanıcısıyla yapılıyordu. İlk çalışmada iş başarısız oldu:
`
rsync: [generator] failed to set times on ".../index.html": Operation not permitted (1)
.f..t...... index.html
`
Çıktıdaki .f..t...... önemliydi: dosya içeriği aynıydı (içerik için c bayrağı yok), yalnızca zaman damgası (t) farklıydı. -t (veya -a) seçeneği hedef dosyanın mtime'ını kaynakla eşitlemeye çalışır; bunu yalnızca dosyanın sahibi (ya da root) yapabilir. Deploy kullanıcısı klasöre yazabiliyor ama dosyaların sahibi değil, bu yüzden her dosya için hata verdi ve rsync çıkış kodu 23 ile bitti.
Çözüm -t'yi kaldırmaktı:
`bash
rsync -rlzc --chmod=D755,F644 --itemize-changes ./ HEDEF:.
`
-c (--checksum) zaten dosyaları içeriğe göre karşılaştırdığı için zaman damgası gerekmedi. Üstelik CI'da checkout her seferinde yeni mtime ürettiğinden, -c olmadan her çalışmada bütün dosyalar yeniden gönderilirdi.
Sonuç: sahibi farklı dosyalara yazan bir deploy'da -a yerine -rlz ve --checksum kullan. Değişen dosyalar klasörde yeniden oluşturulup yer değiştirdiği için sahip deploy kullanıcısına geçer, site okumaya devam eder.