Automatische Aktualisierung von Homebrew

13

Ich verwende derzeit den Homebrew-Paketmanager und meine Frage lautet: Ist es möglich, ein Bash-Skript zu schreiben, um es auszuführen, brew updateund schließlich, brew upgradewenn zum ersten Mal eine Shell geöffnet wird? Ich benutze momentan iTerm.

g_rmz
quelle
Sie können dies in einer ~/.bash_profileDatei tun . Sie müssen überprüfen, ob nur eine Terminalsitzung geöffnet ist, und dann ausführen brew update. Überprüfen Sie stackoverflow.com/questions/6172663/… auf die Anzahl der Terminalfenster.
Mateusz Szlosek
Das ist die Anzahl der Terminals, die geöffnet sind, wenn das Skript ausgeführt wird, oder die Anzahl der Terminals, die im Allgemeinen geöffnet sind?
g_rmz
Dies ist die Anzahl der Terminals, die geöffnet sind (Fenster + Registerkarten), wenn das Skript ausgeführt wird. ~/.bash_profilewird zu Beginn der Terminalsitzung automatisch ausgeführt. Diese Prüfung ist erforderlich, wenn Sie brew updatebeim ersten Start ausgeführt werden müssen. Wenn Sie dies jedes Mal ausführen möchten, wenn ein neues Fenster geöffnet wird, überspringen Sie diesen Schritt und führen Sie es brew updateaus ~/.bash_profile.
Mateusz Szlosek
Dadurch
OK danke! :) Es wird die Leistung des Terminals sehr schlecht verringern?
g_rmz

Antworten:

20

Dies ist sehr einfach zu tun.

Aus Gründen der Effizienz (und des coolen Faktors) würde ich ein Tool wie Lingon verwenden , um dieses Skript regelmäßig mit launchctl / launchd zu starten, anstatt jedes Mal, wenn Sie eine Shell starten. Auf meinem MacBook dauert es 3 Sekunden, um das zweite Mal zu aktualisieren (keine Arbeit erledigt, DNS-Cache eingestellt usw.), und es dauert 10 Sekunden, um das erste Mal auszuführen (keine Arbeit erledigt) oder mehr als 15 Sekunden, wenn ein Paket benötigt wird heruntergeladen oder kompiliert werden.

Vielleicht einmal am Tag oder einmal in der Stunde - im Hintergrund zu laufen würde angesichts dieser Ausführungszeiten ausreichen?

Sie können ein einfaches Skript /usr/local/bin/brewuperstellen, das nacheinander Brew aufruft und die Ergebnisse im Systemprotokoll protokolliert

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

Ich rufe einfach die Brauerei an, wenn ich Tee machen will oder wenn ich anfange und sie im Hintergrund laufen lasse.

brewup &
bmike
quelle
2
+1 Ich stimme zu, dass es besser ist, eine Art Launchclt zu verwenden, als bei jedem Start des Terminals ausgeführt zu werden. Zusätzlich ist es terminalunabhängig (für iTerm-Benutzer).
Mateusz Szlosek
1
Das ist genial, danke! :) Wie wäre es mit Crontab anstelle von Lingon?
g_rmz
2
@g_rmz Es ist nichts falsch mit Crontab und es ist leicht zu wissen. Wenn es funktioniert, führen Sie es aus. Der Vorteil von launchdover cronist, dass es widerstandsfähiger und leistungsfreundlicher ist und Schlaf- / Fehlintervalle natürlicher handhabt.
bmike
Danke für das tolle Drehbuch. Nur aus Neugier - was ist die Option -t?
Avriis
1
Hey @dahved. Die Trockenversion der tFlagge finden Sie in der Manpage zum Logger . Ich benutze es , so dass ich diese Nachrichten im Meer von Protokollen mit einer leicht finden kann grepoder logBefehl und Prädikat / Suchbegriff ein .
bmike
5

Es gibt ein Tool namens homebrew-autoupdate, das dies für Sie erledigt . Es kann automatisch brew updatealle 24 Stunden im Hintergrund ausgeführt werden (konfigurierbar), um sicherzustellen, dass Sie immer über aktuelle Homebrew-Daten verfügen, wenn Sie Pakete installieren / aktualisieren.

Um es zu installieren, führen Sie es aus brew tap domt4/autoupdateund brew autoupdate --start 43200konfigurieren Sie es so, dass es alle 12 Stunden (43200 Sekunden) automatisch aktualisiert wird.

Daniel Compton
quelle
0

Ich bevorzuge es, Homebrew beim Start zu aktualisieren. Ich habe ein Skript brew-update.shin ~/Applications:

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

Dieses Skript wird beim Start mit ausgeführt launchd. Dafür habe ich 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>

Beachten Sie, dass es möglicherweise nicht zuverlässig aktualisiert wird, wenn Sie beispielsweise ein MacBook haben und nur den Deckel öffnen und schließen. Für meinen iMac funktioniert es jedoch gut, dass ich ihn regelmäßig herunterfahre und starte. Lass mich wissen ob es funktioniert!

Daan
quelle