อัปเดต Homebrew โดยอัตโนมัติ


13

ฉันกำลังใช้ตัวจัดการแพคเกจ Homebrew และคำถามของฉันคือ: เป็นไปได้ไหมที่จะเขียนสคริปต์ของ bash เพื่อดำเนินการbrew updateและในที่สุดbrew upgradeเมื่อใดก็ตามที่เปิดเชลล์เป็นครั้งแรก ตอนนี้ฉันใช้ iTerm


คุณสามารถทำได้ใน~/.bash_profileไฟล์ คุณจะต้องตรวจสอบว่า 1 เทอร์มินัลเซสชันเปิดอยู่หรือbrew updateไม่เท่านั้น ตรวจสอบstackoverflow.com/questions/6172663/…เพื่อดูจำนวนหน้าต่างเทอร์มินัล
Mateusz Szlosek

นั่นคือจำนวนเทอร์มินัลที่เปิดขึ้นเมื่อสคริปต์ถูกเรียกใช้งานหรือจำนวนเทอร์มินัลที่เปิดโดยทั่วไป?
g_rmz

นั่นคือจำนวนเทอร์มินัลที่เปิด (แท็บ windows +) เมื่อรันสคริปต์ ~/.bash_profileจะดำเนินการโดยอัตโนมัติเมื่อเริ่มต้นเซสชันเทอร์มินัล การตรวจสอบนี้เป็นสิ่งจำเป็นหากคุณจำเป็นต้องเรียกใช้brew updateตั้งแต่เริ่มต้นครั้งแรก หากคุณต้องการที่จะทำงานนี้ทุกครั้งที่หน้าต่างใหม่เปิดข้ามขั้นตอนนี้และเรียกใช้ในbrew update ~/.bash_profile
Mateusz Szlosek

มันจะทำให้การเปิดแท็บเทอร์มินัลช้ามาก
user151019

โอเคขอบคุณ! :) มันจะลดประสิทธิภาพของเทอร์มินัลแย่มาก?
g_rmz

คำตอบ:


20

มันง่ายมากที่จะทำ

เพื่อประสิทธิภาพ (และปัจจัยที่ยอดเยี่ยม) ฉันจะใช้เครื่องมืออย่างLingonเพื่อเรียกใช้สคริปต์นี้เป็นระยะโดยใช้ launchctl / launchd แทนทุกครั้งที่คุณเริ่มเชลล์ บน MacBook ของฉันใช้เวลา 3 วินาทีในการอัปเดตครั้งที่สอง (ไม่ได้ทำงาน, ตั้งค่าแคช DNS, ฯลฯ ... ) และใช้เวลา 10 วินาทีในการเรียกใช้ครั้งแรก (ไม่ได้ทำงาน) หรือ 15+ วินาทีหากแพ็คเกจต้องการ ที่จะดาวน์โหลดหรือรวบรวม

บางทีวันละครั้งหรือหนึ่งครั้งต่อชั่วโมง - การทำงานในพื้นหลังจะเพียงพอที่ให้เวลาเหล่านั้นเพื่อดำเนินการ?

คุณสามารถสร้างสคริปต์แบบง่าย ๆ/usr/local/bin/brewupที่เรียกการก่อต่อและบันทึกผลลัพธ์ลงในบันทึกของระบบ

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

ฉันแค่เรียกการชงเมื่อฉันกำลังจะไปทำชาหรือเมื่อฉันเริ่มต้นและปล่อยให้มันทำงานในพื้นหลัง

brewup &

2
+1 ฉันยอมรับว่าเป็นการดีกว่าที่จะใช้ Launchclt ประเภท Tome แทนที่จะเรียกใช้ที่จุดเริ่มต้นของเทอร์มินัลทุกครั้ง นอกจากนี้ยังเป็น Terminal แบบอิสระ (สำหรับผู้ใช้ iTerm)
Mateusz Szlosek

1
นี่มันยอดเยี่ยมมากขอบคุณ! :) แล้ว crontab แทน Lingon ล่ะ?
g_rmz

2
@g_rmz ไม่มีอะไรผิดปกติกับ crontab และเป็นเรื่องง่ายที่จะรู้ ถ้ามันใช้งานได้ทำงานกับมัน ประโยชน์ของการlaunchdกว่าcronก็คือว่ามันมีความยืดหยุ่นมากขึ้นพลังงานมากขึ้นเป็นมิตรและจับนอนหลับ / ช่วงเวลาที่พลาดขึ้นตามธรรมชาติ
bmike

ขอบคุณที่สคริปต์ที่ยอดเยี่ยม เพิ่งออกมาจากความอยากรู้ - ตัวเลือก -t คืออะไร?
avriis

1
เฮ้ @ ดาเวด ดูหน้า man สำหรับ logger สำหรับรุ่นtธงแห้ง ฉันใช้มันเพื่อให้ฉันสามารถค้นหาข้อความเหล่านี้ในทะเลของบันทึกด้วยคำสั่งที่ง่ายgrepหรือlogคำกริยาและคำ / ค้นหา
bmike

7

มีเครื่องมือที่เรียกว่าhomebrew-autoupdateซึ่งจะทำสิ่งนี้ให้คุณ มันสามารถทำงานbrew updateในพื้นหลังโดยอัตโนมัติทุก ๆ 24 ชั่วโมง (กำหนดค่าได้) เพื่อให้แน่ใจว่าคุณมีข้อมูล homebrew ใหม่เสมอเมื่อคุณไปที่แพ็คเกจการติดตั้ง / อัพเกรด

หากต้องการติดตั้งให้รันbrew tap domt4/autoupdateและbrew autoupdate --start 43200กำหนดค่าให้อัปเดตอัตโนมัติทุก ๆ 12 ชั่วโมง (43200 วินาที)


0

ฉันต้องการอัปเดต Homebrew เมื่อเริ่มต้น ฉันมีสคริปต์Update Homebrew.shใน~/Library/Scripts:

#!/usr/local/bin/bash

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

launchdสคริปต์นี้จะมีการเรียกใช้ในการเริ่มต้นขึ้นโดยใช้ สำหรับสิ่งที่ฉันมีUpdate Homebrew.plistใน~/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>

โปรดทราบว่ามันอาจไม่อัปเดตอย่างน่าเชื่อถือเมื่อคุณพูดว่ามี MacBook และเปิดและปิดฝาเท่านั้น อย่างไรก็ตามมันทำงานได้ดีสำหรับ iMac ของฉันที่ฉันปิดและเปิดเครื่องเป็นประจำ แจ้งให้เราทราบหากใช้งานได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.