Làm thế nào để kiểm tra nếu có lỗi xảy ra trong ssh?


8

Tôi đang viết một kịch bản triển khai và tôi cần quay lại nếu có lỗi xảy ra.

Ví dụ:

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

Ngay bây giờ khi tôi thực thi tập lệnh này, nếu mkdir thất bại, nó sẽ in nó trên màn hình của tôi và tiếp tục thực thi. Tôi cần phải bắt lỗi đó và làm một cái gì đó về nó.

Câu trả lời:


6

Trạng thái thoát của sshsẽ là trạng thái thoát của lệnh từ xa. Ví dụ

ssh myapp 'exit 42'
echo $?

nên in 42 ( $?là trạng thái thoát của lệnh cuối cùng được thực thi).

Một lựa chọn là thoát ngay nếu mkdirthất bại:

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

Có lẽ tốt hơn để cố gắng xử lý bất kỳ lỗi từ xa trong tập lệnh của bạn, nếu có thể.


5

Nếu bạn thực sự cần bắt thông báo lỗi, bạn có thể thử điều này:

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

Bằng cách này, bạn chuyển hướng đầu ra lỗi tiêu chuẩn sang đầu ra tiêu chuẩn và lưu đầu ra của lệnh ssh vào $result. Nếu bạn chỉ cần mã lỗi / trạng thái thoát, hãy xem câu trả lời này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.