अगर ssh के दौरान कोई त्रुटि हुई है तो कैसे जांचें?


8

मैं एक परिनियोजन स्क्रिप्ट लिख रहा हूं, और यदि कोई त्रुटि हुई है तो मुझे रोलबैक करने की आवश्यकता है।

उदाहरण के लिए:

#!/bin/bash
ssh myapp '
    mkdir /some/dir
    # check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?

अभी जब मैं इस स्क्रिप्ट को निष्पादित करता हूं, अगर mkdir विफल रहता है, तो यह मेरी स्क्रीन पर प्रिंट करता है और निष्पादन जारी रखता है। मुझे उस त्रुटि को पकड़ने और इसके बारे में कुछ करने की आवश्यकता है।

जवाबों:


6

बाहर निकलने की स्थिति sshरिमोट कमांड की निकास स्थिति होगी। उदाहरण के लिए

ssh myapp 'exit 42'
echo $?

42 प्रिंट होना चाहिए ( $?निष्पादित अंतिम कमांड की निकास स्थिति है)।

mkdirविफल होने पर तुरंत बाहर निकलने का एक विकल्प है :

ssh myapp 'mkdir /some/dir || exit 42; do-more-stuff'
if [[ $? = 1 ]]; then
   echo "Remote mkdir failed"
fi

यदि संभव हो तो अपनी स्क्रिप्ट में किसी भी दूरस्थ विफलता को संभालने की कोशिश करना बेहतर है।


5

यदि आपको वास्तव में त्रुटि संदेश को पकड़ने की आवश्यकता है तो आप यह कोशिश कर सकते हैं:

#!/bin/bash
result=`ssh myapp 'mkdir /some/dir' 2>&1`
if [[ -n $result ]]; then
    echo "the following error occurred: $result"
fi

इसके द्वारा आप मानक त्रुटि आउटपुट को मानक आउटपुट पर पुनर्निर्देशित करते हैं और ssh कमांड के आउटपुट को सेव करते हैं $result। यदि आपको केवल त्रुटि कोड / निकास स्थिति की आवश्यकता है, तो यह उत्तर देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.