मैं वर्तमान में एक वेबसर्वर में हमारे 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/वेबसर्वर पर उपयोग किया जाता है।