Saya ingin menulis logika dalam skrip shell yang akan mencoba lagi untuk menjalankannya lagi setelah 15 detik hingga 5 kali berdasarkan "kode status = GAGAL" jika gagal karena beberapa masalah.
shell-script
Sandeep Singh
sumber
sumber
break
jika perintah berhasil maka itu akan memutus loopif command; then break; fi
atau lebihcommand && break
n
kegagalan, tidak perlu tidur satu kali lagi sebelum keluar.Ganti "perintah" dengan perintah Anda. Ini dengan asumsi bahwa "kode status = GAGAL" berarti kode pengembalian yang bukan nol.
Variasi:
Menggunakan
{..}
sintaks. Bekerja di sebagian besar shell, tetapi tidak BusyBoxsh
:Menggunakan
seq
dan meneruskan kode keluar dari perintah gagal:Sama seperti di atas, tetapi melompati
sleep 15
setelah final gagal. Karena lebih baik hanya menetapkan jumlah loop maksimum satu kali, ini dicapai dengan tidur pada awal loop jikai > 1
:sumber
for i in 1 2 3 4 5
denganfor i in {1..5}
karena lebih mudah dirawat.&&
dievaluasi sebelum||
karena operator didahulukancommand
gagal.[[ i -eq 5]]
sebagai kondisi ATAU sebelum tidur untuk menghindari ini.Contoh:
menghasilkan output ini:
Untuk dunia nyata, contoh kerja dengan perintah kompleks, lihat skrip ini .
sumber
Ini adalah fungsi untuk coba lagi
Keluaran:
sumber
bash retry.sh 3 ping -c1 localhost
GNU Parallel memiliki
--retries
:sumber
Ini adalah alias / skrip satu baris favorit saya
Maka Anda dapat melakukan hal-hal seperti:
dan itu akan terus menjalankan perintah sebelumnya sampai ia menemukan "Proses Selanjutnya"
sumber
fc -e "#"
sebagai gantifc -s
.Saya menggunakan skrip ini yang membuat percobaan ulang dari perintah yang diberikan, manfaat dari skrip ini adalah bahwa jika gagal semua percobaan ulang akan mempertahankan kode keluar.
Mungkin itu bisa menjadi lebih sederhana
sumber
Lihat Contoh di bawah ini:
Saya mencoba untuk menghubungkan port 3389 di localhost, itu akan mencoba lagi sampai gagal 5 kali, jika berhasil maka akan merusak loop.
$?
itu ada status perintah jika nol berarti perintah berhasil dijalankan, jika selain nol berarti perintah faiSepertinya agak rumit, mungkin seseorang melakukannya lebih baik dari ini.
sumber
$?
itu ada status perintah jika nol berarti perintah berhasil dijalankan, jika selain nol berarti perintah gagalAnda dapat menggunakan
loop
perintah, tersedia di sini , seperti:Yang akan melakukan hal Anda setiap 15 detik hingga berhasil, maksimal lima kali.
sumber
Berikut adalah
retry
fungsi rekursif untuk puritan pemrograman fungsional:Berikan perintah (atau nama fungsi) dan secara opsional sejumlah percobaan dan durasi tidur antara percobaan ulang, seperti:
sumber