Automatyczna aktualizacja Homebrew

13

Obecnie używam menedżera pakietów Homebrew, a moje pytanie brzmi: czy mogę napisać skrypt basha w celu wykonania brew updatei ewentualnie brew upgradeprzy pierwszym otwarciu powłoki? Obecnie korzystam z iTerm.

g_rmz
źródło
Możesz to zrobić w ~/.bash_profilepliku. Musisz sprawdzić, czy tylko 1 sesja terminalu jest otwarta, a następnie uruchomić brew update. Sprawdź stackoverflow.com/questions/6172663/... w celu ustalenia liczby okien terminalu.
Mateusz Szlosek,
To jest liczba terminali, które są otwarte podczas wykonywania skryptu, czy ogólnie liczba terminali otwartych?
g_rmz,
Jest to liczba otwartych Terminali (Windows + tabulatory) podczas uruchamiania skryptu. ~/.bash_profilejest wykonywany automatycznie na początku sesji terminalu. Ta kontrola jest potrzebna, jeśli musisz uruchomić brew updateprzy pierwszym uruchomieniu. Jeśli chcesz uruchomić to za każdym razem nowe okno jest otwarte, pomiń ten krok i uruchomić brew updatew ~/.bash_profile.
Mateusz Szlosek,
Spowoduje to, że otwarcie karty Terminal będzie bardzo wolne
użytkownik151019,
Ok dziękuję! :) To bardzo obniży wydajność terminala?
g_rmz,

Odpowiedzi:

20

To jest bardzo łatwe do zrobienia.

Dla wydajności (i fajnego współczynnika) użyłbym narzędzia takiego jak Lingon do okresowego uruchamiania tego skryptu przy użyciu launchctl / launchd zamiast przy każdym uruchomieniu powłoki. Na moim MacBooku aktualizacja po raz drugi zajmuje 3 sekundy (bez pracy, zestaw pamięci podręcznej DNS itp.), A uruchomienie za pierwszym razem (bez pracy) trwa 10 sekund lub 15+ sekund, jeśli pakiet potrzebuje do pobrania lub skompilowania.

Być może raz dziennie lub raz na godzinę - bieganie w tle byłoby wystarczające, biorąc pod uwagę te czasy, aby wykonać?

Możesz stworzyć prosty skrypt, /usr/local/bin/brewupktóry wywołuje napar z kolei i zapisuje wyniki w dzienniku systemowym

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

Dzwonię do browaru, kiedy mam zrobić herbatę lub kiedy zaczynam i pozwalam, aby działała w tle.

brewup &
bmike
źródło
2
+1 Zgadzam się, że lepiej jest używać rodzaju programu uruchomieniowego zamiast uruchamiać się przy każdym uruchomieniu Terminalu. Dodatkowo jest niezależny od terminala (dla użytkowników iTerm).
Mateusz Szlosek,
1
To jest wspaniałe, dziękuję! :) Co powiesz na crontab zamiast Lingona?
g_rmz,
2
@g_rmz Nie ma nic złego w crontab i łatwo to wiedzieć. Jeśli to działa, uruchom go. Zaletą launchdover cronjest to, że jest bardziej sprężysty, bardziej przyjazny dla energii i bardziej naturalnie radzi sobie ze snem / brakiem przerw.
bmike
Dzięki za świetny scenariusz. Z ciekawości - jaka jest opcja -t?
avriis
1
Hej @dahved. Zobacz stronę man dla logger'a dla suchej wersji tflagi. Używam go, więc mogę znaleźć te wiadomości w morzu dzienników za pomocą łatwego greplub logpolecenia i predykatu / wyszukiwanego terminu.
bmike
7

Istnieje narzędzie o nazwie homebrew-autoupdate, które zrobi to za Ciebie. Może automatycznie uruchamiać się brew updatew tle co 24 godziny (konfigurowalne), aby mieć pewność, że zawsze masz świeże dane homebrew, kiedy idziesz do instalacji / aktualizacji pakietów.

Aby zainstalować, uruchom brew tap domt4/autoupdatei brew autoupdate --start 43200skonfiguruj, aby aktualizował się automatycznie co 12 godzin (43200 sekund).

Daniel Compton
źródło
0

Wolę aktualizować Homebrew przy uruchamianiu. Mam skrypt Update Homebrew.shw ~/Library/Scripts:

#!/usr/local/bin/bash

for cmd in update upgrade cleanup\ -s; do
  brew $cmd
done

Ten skrypt jest uruchamiany przy uruchamianiu przy użyciu launchd. Do tego mam Update Homebrew.plistw ~/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>Update Homebrew</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/Daan/Library/Scripts/Update Homebrew.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Pamiętaj, że może nie być niezawodnie aktualizowany, jeśli, powiedzmy, masz MacBooka, a tylko otwierasz i zamykasz pokrywę. Jednak działa dobrze w moim iMacu, że regularnie zamykam i uruchamiam. Daj znać czy działa!

Daan
źródło