Tự động cập nhật Homebrew


13

Tôi hiện đang sử dụng trình quản lý gói Homebrew và câu hỏi của tôi là: có khả năng viết kịch bản bash để thực thi brew updatevà cuối cùng brew upgradebất cứ khi nào mở vỏ lần đầu tiên không? Hiện tại tôi đang sử dụng iTerm.


Bạn có thể làm điều này trong ~/.bash_profiletập tin. Bạn sẽ cần kiểm tra nếu chỉ có 1 phiên Terminal được mở và sau đó chạy brew update. Kiểm tra stackoverflow.com/questions/6172663/ trên để xác định số lượng cửa sổ Terminal.
Mateusz Szlosek

Đó là số lượng thiết bị đầu cuối được mở khi tập lệnh được thực thi hay số lượng thiết bị đầu cuối được mở nói chung?
g_rmz

Đó là số lượng Thiết bị đầu cuối được mở (cửa sổ + tab) khi tập lệnh được chạy. ~/.bash_profileđược tự động thực hiện khi bắt đầu phiên Terminal. Kiểm tra này là cần thiết nếu bạn cần chạy brew updateở lần bắt đầu đầu tiên. Nếu bạn muốn chạy cái này mỗi khi cửa sổ mới được mở, hãy bỏ qua bước này và chạy brew updatevào ~/.bash_profile.
Mateusz Szlosek

Nó sẽ làm cho việc mở tab Terminal rất chậm
user151019

Ok cảm ơn bạn! :) Nó sẽ làm giảm hiệu suất của thiết bị đầu cuối rất xấu?
g_rmz

Câu trả lời:


20

Điều này rất dễ làm.

Để đạt hiệu quả (và yếu tố tuyệt vời), tôi sẽ sử dụng một công cụ như Lingon để khởi chạy tập lệnh này định kỳ bằng cách sử dụng launchctl / launchd thay vì mỗi lần bạn khởi động shell. Trên MacBook của tôi, phải mất 3 giây để cập nhật lần thứ hai (không có công việc nào được thực hiện, bộ đệm DNS, v.v.) và phải mất 10 giây để chạy lần đầu tiên (không thực hiện công việc nào) hoặc hơn 15 giây nếu gói cần để được tải xuống hoặc biên dịch.

Có lẽ một lần một ngày hoặc một lần một giờ - chạy trong nền sẽ đủ cho những lần đó để thực hiện?

Bạn có thể tạo một tập lệnh đơn giản /usr/local/bin/brewupgọi lần lượt brew và ghi kết quả vào nhật ký hệ thống

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

Tôi chỉ gọi brewup khi tôi chuẩn bị pha trà hoặc khi tôi bắt đầu và để nó chạy trong nền.

brewup &

2
+1 Tôi đồng ý rằng tốt hơn là sử dụng loại launchclt tome thay vì chạy ở mỗi lần khởi động Terminal. Thêm vào đó là Terminal độc lập (đối với người dùng iTerm).
Mateusz Szlosek

1
Điều này thật tuyệt vời, cảm ơn bạn! :) Làm thế nào về crontab thay vì Lingon?
g_rmz

2
@g_rmz Không có gì sai với crontab và thật dễ dàng để biết. Nếu nó hoạt động, chạy với nó. Những lợi ích của launchdhơn cronlà nó bền bỉ hơn, quyền lực hơn thân thiện, và xử lý ngủ khoảng / bỏ lỡ một cách tự nhiên hơn.
bmike

Cảm ơn vì kịch bản tuyệt vời. Vì tò mò - tùy chọn -t là gì?
avriis

1
Này @dahved. Xem trang man để ghi nhật ký cho phiên bản khô của tcờ. Tôi sử dụng nó để tôi có thể tìm thấy những thông điệp này trong biển nhật ký với một thuật ngữ dễ dàng grephoặc loglệnh và vị ngữ / tìm kiếm.
bmike

5

Có một công cụ gọi là homebrew-autoupdate sẽ làm điều này cho bạn. Nó có thể tự động chạy brew updatetrong nền sau mỗi 24 giờ (có thể định cấu hình) để đảm bảo rằng bạn luôn có dữ liệu homebrew mới khi bạn đi đến các gói cài đặt / nâng cấp.

Để cài đặt, nó chạy brew tap domt4/autoupdatebrew autoupdate --start 43200định cấu hình để tự động hoàn thành sau mỗi 12 giờ (43200 giây).


0

Tôi thích cập nhật Homebrew khi khởi nghiệp. Tôi có một kịch bản brew-update.shtrong ~/Applications:

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

Kịch bản này được chạy khi khởi động bằng cách sử dụng launchd. Cho rằng, tôi có brew-update.plisttrong ~/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>

Lưu ý rằng nó có thể không cập nhật đáng tin cậy khi bạn nói rằng có MacBook và chỉ mở và đóng nắp. Tuy nhiên, nó hoạt động tốt cho iMac của tôi mà tôi thường xuyên tắt và khởi động. Cho tôi biết nếu nó hoạt động!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.