Aggiornamento automatico di Homebrew


13

sto attualmente usando il gestore di pacchetti Homebrew e la mia domanda è: è possibile scrivere uno script bash per eseguirlo brew updateed eventualmente brew upgradeogni volta che si apre una shell per la prima volta? Sto usando iTerm al momento.


Puoi farlo in un ~/.bash_profilefile. Dovrai verificare se è aperta solo 1 sessione Terminale ed eseguirla brew update. Controllare stackoverflow.com/questions/6172663/… per determinare il numero di finestre del Terminale.
Mateusz Szlosek,

Questo è il numero di terminali aperti quando viene eseguito lo script o il numero di terminali aperti in generale?
g_rmz,

Questo è il numero di Terminali aperti (finestre + schede) quando viene eseguito lo script. ~/.bash_profileviene eseguito automaticamente all'inizio della sessione Terminale. Questo controllo è necessario se è necessario eseguire brew updateal primo avvio. Se si desidera eseguire questo ogni volta che una nuova finestra è aperta, saltare questo passaggio e correre brew updatein ~/.bash_profile.
Mateusz Szlosek,


Ok grazie! :) Diminuirà molto male le prestazioni del terminale?
g_rmz,

Risposte:


20

Questo è molto facile da fare.

Per efficienza (e fattore interessante), utilizzerei uno strumento come Lingon per lanciare periodicamente questo script usando launchctl / launchd anziché ogni volta che avvii una shell. Sul mio MacBook, ci vogliono 3 secondi per aggiornare la seconda volta (nessun lavoro fatto, set di cache DNS, ecc ...) e ci vogliono 10 secondi per eseguire la prima volta (nessun lavoro fatto) o 15+ secondi se un pacchetto richiede da scaricare o compilare.

Forse una volta al giorno o una volta all'ora - l'esecuzione in background sarebbe sufficiente, dato quei tempi per eseguire?

È possibile creare un semplice script /usr/local/bin/brewupche chiama a turno brew e registra i risultati nel registro di sistema

#!/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

Chiamo il brewup quando sto per andare a preparare il tè o quando inizio e lo lascio correre in background.

brewup &

2
+1 Sono d'accordo che è meglio usare una sorta di launchclt invece di correre ad ogni inizio del Terminale. Inoltre è Terminal indipendente (per utenti iTerm).
Mateusz Szlosek,

1
Questo è geniale, grazie! :) Che ne dici di crontab invece di Lingon?
g_rmz,

2
@g_rmz Non c'è niente di sbagliato in crontab ed è facile da sapere. Se funziona, eseguilo. I vantaggi di launchdover cronè che è più resistente, più efficiente dal punto di vista energetico e gestisce gli intervalli di sonno / mancata in modo più naturale.
bmike

Grazie per l'ottima sceneggiatura. Solo per curiosità: qual è l'opzione -t?
avriis

1
Ehi, @dahved. Vedi la pagina man per logger per la versione a secco della tbandiera. Lo uso in modo da poter trovare questi messaggi nel mare dei registri con un termine facile grepo logcomando e predicato / ricerca.
bmike

5

C'è uno strumento chiamato homebrew-autoupdate che lo farà per te. Può essere eseguito automaticamente brew updatein background ogni 24 ore (configurabile) per assicurarsi di avere sempre nuovi dati homebrew quando si va a installare / aggiornare pacchetti.

Per installarlo, eseguirlo brew tap domt4/autoupdatee brew autoupdate --start 43200configurarlo per l'aggiornamento automatico ogni 12 ore (43200 secondi).


0

Preferisco aggiornare Homebrew all'avvio. Ho una sceneggiatura brew-update.shin ~/Applications:

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

Questo script viene eseguito all'avvio utilizzando launchd. Per questo, ho brew-update.plistin ~/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>

Nota che potrebbe non aggiornarsi in modo affidabile quando, ad esempio, hai un MacBook e apri e chiudi solo il coperchio. Tuttavia, funziona bene per il mio iMac che spengo e avvio regolarmente. Fammi sapere se funziona!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.