Pembaruan Homebrew secara otomatis

13

Saya saat ini menggunakan manajer paket Homebrew dan pertanyaan saya adalah: apakah mungkin untuk menulis skrip bash untuk mengeksekusi brew updatedan akhirnya brew upgradesetiap kali membuka shell untuk pertama kalinya? Saya menggunakan ITerm saat ini.

g_rmz
sumber
Anda dapat melakukan ini dalam ~/.bash_profilefile. Anda harus memeriksa apakah hanya 1 sesi Terminal yang terbuka dan kemudian jalankan brew update. Periksa stackoverflow.com/questions/6172663/... untuk menentukan jumlah jendela Terminal.
Mateusz Szlosek
Itu adalah jumlah terminal yang terbuka ketika skrip dieksekusi atau jumlah terminal dibuka secara umum?
g_rmz
Itu adalah jumlah Terminal yang dibuka (windows + tab) ketika skrip dijalankan. ~/.bash_profiledieksekusi secara otomatis pada awal sesi Terminal. Pemeriksaan ini diperlukan jika Anda perlu menjalankan brew updatepada awal pertama. Jika Anda ingin menjalankan ini setiap kali jendela baru dibuka, melewatkan langkah ini dan menjalankan brew updatedi ~/.bash_profile.
Mateusz Szlosek
Ini akan membuat membuka tab Terminal sangat lambat
user151019
Oke terima kasih! :) Ini akan menurunkan kinerja terminal sangat buruk?
g_rmz

Jawaban:

20

Ini sangat mudah untuk dilakukan.

Untuk efisiensi (dan faktor keren), saya akan menggunakan alat seperti Lingon untuk meluncurkan skrip ini secara berkala menggunakan launchctl / launchd alih-alih setiap kali Anda memulai sebuah shell. Di MacBook saya, dibutuhkan 3 detik untuk memperbarui kedua kalinya (tidak ada pekerjaan yang dilakukan, set cache DNS, dll ...) dan butuh 10 detik untuk menjalankan pertama kali (tidak ada pekerjaan yang dilakukan) atau 15+ detik jika sebuah paket membutuhkan untuk diunduh atau dikompilasi.

Mungkin sekali sehari atau satu jam sekali - berlari di latar belakang sudah cukup mengingat waktu untuk mengeksekusi?

Anda bisa membuat skrip sederhana /usr/local/bin/brewupyang memanggil bir pada gilirannya dan mencatat hasilnya ke log sistem

#!/bin/bash

brew=/usr/local/bin/brew
logger=/usr/bin/logger

$brew update 2>&1  | $logger -t brewup.update
$brew upgrade 2>&1 | $logger -t brewup.upgrade
$brew cleanup 2>&1 | $logger -t brewup.cleanup

Saya baru saja menelepon tempat pembuatan bir ketika saya akan membuat teh atau ketika saya memulai dan membiarkannya berjalan di latar belakang.

brewup &
bmike
sumber
2
+1 Saya setuju bahwa lebih baik menggunakan beberapa launchclt daripada menjalankan di setiap awal Terminal. Selain itu, Terminal itu independen (untuk pengguna iTerm).
Mateusz Szlosek
1
Ini brilian, terima kasih! :) Bagaimana dengan crontab, bukan Lingon?
g_rmz
2
@ g_rmz Tidak ada yang salah dengan crontab dan mudah diketahui. Jika berhasil, jalankan dengan itu. Manfaat dari launchdkelebihan cronadalah lebih tahan, lebih ramah daya, dan menangani interval tidur / terlewat secara lebih alami.
bmike
Terima kasih atas naskah yang bagus. Hanya ingin tahu - apa opsi -t?
avriis
1
Hey @dahved. Lihat halaman manual untuk logger untuk versi kering tflag. Saya menggunakannya sehingga saya dapat menemukan pesan-pesan ini di lautan log dengan mudah grepatau logperintah dan predikat / istilah pencarian.
bmike
5

Ada alat yang disebut homebrew-autoupdate yang akan melakukan ini untuk Anda. Itu dapat secara otomatis berjalan brew updatedi latar belakang setiap 24 jam (dapat dikonfigurasi) untuk memastikan bahwa Anda selalu memiliki data homebrew baru ketika Anda pergi untuk menginstal / meningkatkan paket.

Untuk menginstalnya jalankan brew tap domt4/autoupdatedan brew autoupdate --start 43200konfigurasikan untuk memutakhirkan secara otomatis setiap 12 jam (43200 detik).

Daniel Compton
sumber
0

Saya lebih suka memperbarui Homebrew saat start-up. Saya memiliki skrip brew-update.shdi ~/Applications:

for cmd in update upgrade cleanup; do
  brew $cmd
done

Script ini dijalankan saat start-up menggunakan launchd. Untuk itu, saya miliki brew-update.plistdi ~/Library/LaunchAgents:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>brew-update</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/Username/Applications/brew-update.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Perhatikan bahwa itu mungkin tidak diperbarui secara andal ketika Anda, katakanlah, memiliki MacBook dan hanya membuka dan menutup tutupnya. Namun, itu berfungsi dengan baik untuk iMac saya sehingga saya secara teratur mematikan dan memulai. Beritahu saya jika berhasil!

Daan
sumber