2014-12-15 11 views
5

यह समस्या मुझे मार रही है और मुझे लगता है कि मैंने सब कुछ करने की कोशिश की है।/usr/bin/env: ln: प्रतीकात्मक लिंक के बहुत से स्तर

सबसे पहले, कैपिस्ट्रानो को अपग्रेड करते समय समस्या तब शुरू हो रही थी। तैनाती करते समय कैपिस्ट्रानो प्रत्येक आदेश से पहले/usr/bin/env का उपयोग करता है, यह सुनिश्चित करने के लिए कि पर्यावरण सेटअप सही है।

Capistrano आवश्यक साझा निर्देशिका और संबंधित फाइलों को सिमलिंक बनाने के लिए हो जाता है, ऐसा लगता है कि आदेशों का प्रयास:

/usr/bin/env ln -s /full/path /different/full/path 

... और फिर इसे त्रुटियों आउट:

/usr/bin/env: ln: Too many levels of symbolic links 

मुझे पता है यह Capistrano की गलती नहीं, इसलिए मैंने अपने सर्वर पर ssh'ing द्वारा समस्या निवारण शुरू किया और एक ही आदेश की कोशिश कर रहा है, और मुझे एक ही त्रुटि मिलती है (जो कम से कम स्थिरता के लिए अच्छा है)। मैं फिर/usr/bin/env:

ln -s /full/path /different/full/path 

और यह काम करता है !!!! हो सकता है कि आप असली समाधान देख सकें जो मैं नहीं कर सकता?

यहाँ सिर्फ/usr/bin/env आदेश का आउटपुट है:

rvm_bin_path=/home/deployer/.rvm/bin 
GEM_HOME=/home/deployer/.rvm/gems/ruby-1.9.3-p392 
TERM=xterm-256color 
SHELL=/bin/bash 
IRBRC=/home/deployer/.rvm/rubies/ruby-1.9.3-p392/.irbrc 
SSH_CLIENT=... 
OLDPWD=/home/deployer/Sites/example.com 
MY_RUBY_HOME=/home/deployer/.rvm/rubies/ruby-1.9.3-p392 
SSH_TTY=/dev/pts/0 
USER=deployer 
LS_COLORS= ..... 
_system_type=Linux 
rvm_path=/home/deployer/.rvm 
SSH_AUTH_SOCK=.... 
rvm_prefix=/home/deployer 
MAIL=/var/mail/deployer 
PATH=/home/deployer/.rvm/gems/ruby-1.9.3-p392/bin:/home/deployer/.rvm/gems/[email protected]/bin:/home/deployer/.rvm/rubies/ruby-1.9.3-p392/bin:/home/deployer/.rvm/bin:/opt/rubyee/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/deployer/.rvm/bin 
PWD=/home/deployer/Sites 
LANG=en_US.UTF-8 
_system_arch=i386 
_system_version=12.04 
rvm_version=1.26.4 (latest) 
SHLVL=1 
HOME=/home/deployer 
LOGNAME=deployer 
GEM_PATH=/home/deployer/.rvm/gems/ruby-1.9.3-p392:/home/deployer/.rvm/gems/[email protected] 
SSH_CONNECTION=.... 
LESSOPEN=| /usr/bin/lesspipe %s 
LESSCLOSE=/usr/bin/lesspipe %s %s 
RUBY_VERSION=ruby-1.9.3-p392 
_system_name=Ubuntu 
_=/usr/bin/env 

मैं भी निम्नलिखित की तरह आदेशों की कोशिश की है, संभावित सिमलिंक खोजने के लिए लूप:

find . -maxdepth 20 -type l -exec ls -ld {} + 

लेकिन है उत्पादन नहीं सही परिणाम:

lrwxrwxrwx 1 deployer deployer ... 
+1

सिमलिंक जो Capistrano और पहले से ही बनाने के लिए मौजूद है कोशिश कर रहा है जब आप एक तैनाती चलाने यह स्वयं पाशन और इस त्रुटि पैदा हो गई। आप सेट का उपयोग कर capistrano स्क्रिप्ट में डिफ़ॉल्ट env पथ सेट कर सकते हैं: default_env। क्या आप अपना .bash_profile भी पोस्ट कर सकते हैं? Capistrano हमेशा एक गैर-लॉगिन, गैर-इंटरैक्टिव खोल निर्दिष्ट करता है, इसलिए जब यह लॉग इन होता है तो .bash_profile के लिए दिखता है। इससे भी मदद मिलेगी। – user944938

+0

जैसा कि मैंने मूल पोस्ट में कहा था, मैं बिना किसी कैपिस्ट्रानो की समस्या का परीक्षण कर सकता था, मेरे सर्वर पर ssh'ing करके और उसी आदेश का प्रयास कर रहा था,/usr/bin/env prefixing के साथ। इसलिए, मैं साबित कर सकता हूं कि Capistrano कारण नहीं है। इसके अलावा, symlink पहले से ही एक तथ्य के लिए मौजूद नहीं है। जैसे मैंने कहा, मैन्युअल रूप से मेरे सर्वर पर कैपिस्ट्रानो के समान कमांड का प्रयास करते समय, मुझे एक ही त्रुटि मिलती है। (मैंने टोपी 3 के लिए सभी दस्तावेज़ भी पढ़े हैं, और मुझे इसके बारे में पता है: default_env चर, लेकिन जैसा कि मैंने कहा, समस्या capistrano के बाहर है।) मैं अपना .bashrc और .profile भी पोस्ट करूंगा। – mkralla11

+2

इसे 'स्ट्रेस' के तहत चलाने का प्रयास करें? जैसा कि 'स्ट्रेस/usr/bin/env ln -s/full/path/different/full/path' में है - शायद यह एक साफ़ प्रदान करेगा। – RoUS

उत्तर

0

इस प्रयास करें सिमलिंक छोरों को खोजने के लिए:

find . -follow -printf "" 
+0

क्या आपने पहले से ही आदेश नहीं देखा है? 'ढूंढो। -मैक्सडेपथ 20-प्रकार l -exec ls -ld {} + '(यह एक और विस्तृत है)। और नहीं, आउटपुट कुछ भी नहीं है। – mkralla11

1

हो सकता है कि आप उसी ln उपयोगिता का उपयोग नहीं कर रहे हों।

सीधे इंटरैक्टिव खोल से इसे आमंत्रित करते समय ln ओवरराइड हो सकता है उदा। alias द्वारा या कुछ खोल फ़ंक्शन ln() {...;} द्वारा।

ऐसा नहीं होता है जब /usr/bin/env ऐसा करने का प्रयास करता है (AFAIK PATH में) लगता है। मुझे संदेह है कि ln में यह समस्याएं हैं, इसलिए आपको यह त्रुटि मिल रही है।

यह एक उदाहरण परिदृश्य है कि आपके मामले के समान हो सकती है:

# start from an empty directory 
$ ls -l 
total 0 
# create a problematic `ln` in the current directory 
$ ln -s ln ln 
$ ls -l 
total 0 
lrwxrwxrwx 1 me me 2 Jan 7 20:28 ln -> ln 
# have an alias for the "real" ln 
$ alias ln=/bin/ln 
# mess up PATH 
$ PATH="$PWD" 

अब दो विकल्प की कोशिश करते हैं, /usr/bin/env पहले चला जाता है:

$ /usr/bin/env ln -s /some/path /tmp/path 
/usr/bin/env: ln: Too many levels of symbolic links 

फिर सादे ln (याद है कि हम alias इसे संपादित करें):

$ ln -s /some/path /tmp/path 
$ echo $? 
0 
$ /bin/ls -l /tmp/path 
lrwxrwxrwx 1 me me 10 Jan 7 20:31 /tmp/path -> /some/path 

तो मेरा सुझाव है: ln के साथ समस्याओं को देखें, उदा। दृश्यमान के सभी अलग-अलग विकल्पों को ढूंढकर।bash में आप इस चला सकता है:

$ type -a ln 
संबंधित मुद्दे