2012-09-11 27 views
6

Şu anda svn veri havuzumuzun en son revizyonunu bir web sunucusuna aktarmak için bir bash kabuk betiği yazıyorum. Bu, sunucuya svn export kullanılarak yapılır ve web sunucusu ile rsync'ing, özel bir kullanıcı (sync_user olarak adlandırılır), bu güncellemeleri gerçekleştirmek için her bir tarafta (sunucu A ve web sunucusu) yeterli izinlerle oluşturulmuştur. senaryo sync_user olarak svn ihracat ve rsync gerçekleştirmek için "su sync_user" kullanır:rsync pop_dir "/ home/user_x" başarısız oldu: izin reddedildi, neden?

sync_section komut bir fonksiyondur
export -f sync_section 
su sync_user -c "sync_section $source $tmp $dest" 

:

# critical section which performs the actual website update (export & sync) 
# takes 3 parameters: source, tmp, dest 
function sync_section { 

    source=$1 
    tmp=$2 
    tmp_old=$tmp"_old" 
    dest=$3 

    #enter critical section 
    set -e 

    # export to temp folder on server A 
    svn export -q --force $source $tmp --native-eol LF 

    # rsync with remote live website folder. 
    rsync -avzhiO $tmp $dest 

    # clean up 
    rm -rf $tmp_old 
    mv -f $tmp $tmp_old 

    # exit critical section 
    set +e 
} 

fikri herkesin izinleri kimin olmasıdır web sunucusu güncellemek/senkronize etmek, sync_user şifresini bilir, böylece "su sync_user" bölümüne girebilir.

teoride iyi geliyor ama rsync bu kurulum memnun değil ve bana aşağıdaki hata iletisini veriyor: öğrendim bazı googeling sonra

#### rsync output: 

building file list ... rsync: pop_dir "/home/user_x" failed: Permission denied (13) 
rsync error: errors selecting input/output files, dirs (code 3) at flist.c(1314) [sender=2.6.8] 

(user_x senaryoyu çağırma kullanıcı) o Sorun rsync'nin, sync_user dosyasının komut dosyasının ana dizinde tam erişim izinlerine sahip olmasını gerektirdiğinden dolayı yaşıyorum. Bu doğru mu? ve eğer öyleyse neden? ve bunun için bir çalışma var mı?

Not: Kullanıcının ana dizini, betikte hiç kullanılmamaktadır. Web sunucusunda yalnızca/tmp/on A sunucusu ve/var/www/vhosts/kullanılır.

cevap

2

Pek çok ileri ve geri sonra sorunu çözmeyi başardık. Tam olarak bir kullanıcı izni sorunu ve böyle rsync ile ilgisi yoktur.

'su sync_user ...' çalıştırırken, etkin terminal komut dosyasını (user_x) çağıran kullanıcının giriş dizinine işaret eder. Sync_user'nin bu klasörde olmasına bile izin verilmediğinden, hata mesajına neden olan bazı komutların (rsync veya ls gibi) çalıştırılmasına izin verilmez. Şimdi

su sync_user -c "cd ~; sync_section $source $tmp $dest" 

Ve senaryoyu bir cazibesi :) Bu ileride birilerine yardımcı olur umarım

gibi çalışır:

düzeltmek için ben 'sync_section komut dosyasını çalıştırmadan önce '~ cd' a eklenen !

İlgili konular