จะตรวจสอบได้อย่างไรว่ามีข้อผิดพลาดเกิดขึ้นระหว่าง 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เพื่อ หากคุณต้องการรหัสข้อผิดพลาด / สถานะออกดูคำตอบนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.