2012-09-11 10 views
6

मैं वर्तमान में एक वेबसर्वर में हमारे svn भंडार के नवीनतम संशोधन को स्थानांतरित करने के लिए एक बैश खोल स्क्रिप्ट लिख रहा हूं। यह सर्वर ए पर svn निर्यात का उपयोग करके किया जाता है और इसे वेबसर्वर के साथ rsyncing कर रहा है, एक विशेष उपयोगकर्ता (जिसे sync_user कहा जाता है) इन अद्यतनों को करने के लिए प्रत्येक पक्ष (सर्वर ए और वेबसर्वर) पर पर्याप्त अनुमतियों के साथ बनाया गया था। स्क्रिप्ट "सु sync_user" का उपयोग करता है SVN निर्यात और sync_user के रूप में rsync प्रदर्शन करने के लिए:rsync pop_dir "/ home/user_x" विफल: अनुमति अस्वीकार कर दी गई, क्यों?

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

जहां sync_section लिपि में एक समारोह है:

# 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 
} 

विचार करने के लिए अनुमतियां हैं जो कोई है वेबसर्वर को अपडेट/सिंक करें sync_user का पासवर्ड जानता है, इस प्रकार "su sync_user" खंड में प्रवेश कर सकता है।

सिद्धांत में अच्छा लगता है, लेकिन rsync इस सेटअप के साथ खुश नहीं है और मुझे निम्न त्रुटि संदेश देता है: मुझे पता चला

#### 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] 

कुछ googeling के बाद (user_x स्क्रिप्ट बुला उपयोगकर्ता है) कि समस्या मैं मैं rsync के कारण होता हूं क्योंकि इसे sync_user को स्क्रिप्ट कॉलर की होम निर्देशिका पर पूर्ण पहुंच अनुमतियों की आवश्यकता होती है। क्या यह सही है? और यदि ऐसा है तो क्यों? और इसके लिए एक काम है?

नोट: उपयोगकर्ता की होम निर्देशिका स्क्रिप्ट में बिल्कुल उपयोग नहीं की जाती है। केवल सर्वर पर/tmp/सर्वर ए और/var/www/vhosts/वेबसर्वर पर उपयोग किया जाता है।

उत्तर

2

ठीक है तो कुछ और आगे के बाद, हम समस्या को हल करने में कामयाब रहे। यह पूरी तरह से उपयोगकर्ता अनुमति समस्या है और इस तरह के rsync के साथ कुछ भी नहीं है।

'su sync_user ...' चलाते समय सक्रिय टर्मिनल स्क्रिप्ट (user_x) को कॉल करने वाले उपयोगकर्ता की होम निर्देशिका की ओर इशारा करता है। चूंकि sync_user को उस फ़ोल्डर में होने की इजाजत नहीं है, इसके परिणामस्वरूप इसे कुछ कमांड चलाने की अनुमति नहीं है (जैसे rsync, या ls), जो त्रुटि संदेश का कारण बनता है। अब

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

और स्क्रिप्ट एक आकर्षण :)

मुझे आशा है कि यह भविष्य में किसी को मदद करता है की तरह काम करता है:

इसे ठीक करने के लिए मैं 'sync_section स्क्रिप्ट चलाने से पहले एक' सीडी ~ 'जोड़ा !

संबंधित मुद्दे

 संबंधित मुद्दे