Ssh sırasında herhangi bir hata olup olmadığını kontrol etmek nasıl?


8

Bir dağıtım betiği yazıyorum ve herhangi bir hata oluştuğunda geri almam gerekiyor.

Örneğin:

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

Şu anda bu betiği çalıştırdığımda, mkdir başarısız olursa, ekranımda yazdırır ve yürütmeye devam eder. Bu hatayı yakalamalı ve bunun hakkında bir şeyler yapmalıyım.

Yanıtlar:


6

Çıkış durumu ssh, uzak komutun çıkış durumu olacaktır. Örneğin

ssh myapp 'exit 42'
echo $?

42 yazdırılmalıdır ( $?yürütülen son komutun çıkış durumu).

Bir seçenek, mkdirbaşarısız olursa derhal çıkmaktır:

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

Mümkünse, komut dosyanızdaki uzaktaki herhangi bir hatayı gidermeye çalışmak muhtemelen daha iyidir.


5

Gerçekten hata mesajını yakalamanız gerekiyorsa , şunu deneyebilirsiniz:

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

Bu şekilde standart hata çıkışını standart çıkışa yönlendirirsiniz ve ssh komutunun çıkışını kaydedersiniz $result. Sadece hata koduna / çıkış durumuna ihtiyacınız varsa, bu cevaba bakınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.