Sebuah tool command-line baru bernama attempt telah menarik perhatian para developer yang mencari cara yang lebih baik untuk menangani command dan layanan yang tidak dapat diandalkan. Tool ini memungkinkan pengguna untuk secara otomatis mencoba ulang command yang gagal dengan berbagai strategi backoff, mengatasi masalah umum dalam administrasi sistem dan scripting.
Fitur Utama
- Sederhana: Set fitur yang kecil mencakup sebagian besar kasus penggunaan, basis kode yang dapat diaudit
- Tangguh: Mencakup timeout, jitter, dan exponential backoff dengan rangkaian pengujian yang ekstensif
- Gratis selamanya: Lisensi domain publik untuk semua versi
- Pattern matching pada stdout/stderr untuk percobaan ulang bersyarat
Komunitas Menemukan Solusi Alternatif
Peluncuran ini telah memicu diskusi menarik tentang tool yang sudah ada di bidang ini. Para pengguna dengan cepat menunjukkan beberapa alternatif, dengan satu developer menyebutkan bahwa mereka baru-baru ini memilih recur karena kemampuan penanganan input/output yang superior. Pilihan populer lainnya yang muncul dalam percakapan adalah tool retry yang tersedia secara luas, yang dapat ditemukan di package manager utama seperti Homebrew dan repositori Debian . Hal ini menunjukkan bahwa meskipun ruang masalah ini bukanlah hal baru, masih ada ruang untuk inovasi dan pendekatan yang berbeda.
Alat Alternatif yang Disebutkan
- recur: Memiliki fitur Starlark DSL dan penanganan stdin/stdout yang lebih baik
- retry: Paling dikenal luas, tersedia di manajer paket utama ( Homebrew , Debian )
- expect: Alat tradisional untuk otomatisasi perintah interaktif
- Solusi shell kustom seperti "wait-for-it.sh" untuk Docker Compose
Debat Filosofi Desain
Desain interface tool ini telah menghasilkan diskusi yang mendalam tentang konvensi command-line Unix . Beberapa pengguna mempertanyakan mengapa fitur exponential backoff menggunakan pendekatan subcommand daripada flag double-hyphen tradisional. Penulis menjelaskan pilihan ini dengan membandingkannya dengan struktur subcommand Git , melihat strategi backoff yang berbeda sebagai mode yang berbeda daripada opsi sederhana. Keputusan desain ini mencerminkan pertanyaan yang lebih dalam tentang bagaimana tool CLI modern harus menyeimbangkan familiaritas dengan fungsionalitas.
Instalasi dan Penggunaan Dasar
- Instal melalui:
cargo install attempt-cli
- Sintaks dasar:
attempt [BACKOFF] [OPTIONS] [COMMAND]...
- Contoh:
attempt --retry-if-contains "server not ready" sqlx migrate
- Mendukung exponential backoff:
attempt exponential --retry-if-contains "server not ready" sqlx migrate
Mengatasi Masalah Dunia Nyata
Respons komunitas mengungkapkan betapa umumnya masalah logika retry dalam pekerjaan pengembangan sehari-hari. Para pengguna berbagi solusi mereka sendiri, dari fungsi shell khusus untuk koneksi SSH hingga berbagai workaround untuk dependensi layanan Docker Compose . Diskusi ini menyoroti frustrasi yang lebih luas dengan tool orkestrasi modern, dengan satu pengguna mencatat betapa banyak infrastruktur yang bergantung pada solusi sementara dan skrip perekat.
Setiap kali saya mendengar orang-orang memuji semua orchestrator ini, baik itu Docker , K8 , atau apapun, saya ingat bahwa sebagian besar dari itu adalah kebohongan yang dibangun dengan lem dan tongkat seperti wait-for-it.sh.
Percakapan juga menyentuh fitur yang hilang dari sistem lama, dengan satu developer bernostalgia tentang kemampuan batch dan job control yang kuat yang ada di sistem seperti VAX VMS , menunjukkan bahwa sistem operasi modern masih kekurangan beberapa tool reliabilitas fundamental.
Keterbatasan yang Diketahui
- Mengasumsikan output berenkoding UTF-8 (mengalami crash pada UTF-8 yang tidak valid dengan predikat output)
- Output bantuan tidak mencerminkan bahwa strategi 'fixed' adalah default
- Output bantuan yang panjang dapat berdampak pada kemudahan penemuan dokumentasi
Keterbatasan Teknis dan Trade-off
Meskipun mendapat sambutan positif, para pengguna dan penulis mengakui beberapa keterbatasan saat ini. Tool ini mengasumsikan output yang dikodekan UTF-8 , yang dapat menyebabkan crash dengan program yang mengeluarkan UTF-8 yang tidak valid saat menggunakan pencocokan pola output. Sistem bantuan juga memiliki beberapa keanehan yang tidak sepenuhnya mencerminkan perilaku default. Diskusi yang jujur tentang keterbatasan ini menunjukkan apresiasi komunitas terhadap transparansi dalam pengembangan tool.
Kemunculan attempt dan diskusi di sekitarnya menggambarkan bagaimana developer terus mencari solusi yang lebih baik untuk masalah reliabilitas fundamental, bahkan di area yang mungkin tampak sudah terpecahkan. Keragaman pendekatan dan inovasi yang berkelanjutan menunjukkan bahwa masih ada ruang yang signifikan untuk perbaikan dalam cara kita menangani sistem dan command yang tidak dapat diandalkan.