Uzun bir Xcode veya cargo build'i sırasında Mac'inizin uyumasını engelleyin

Hızlı ve ücretsiz çözüm caffeinate: caffeinate -i cargo build --release komutunu çalıştırın (kendi komutunuzu koyun), macOS o süreç sona erene kadar boşta uykuya geçmez, ekstra bir uygulamaya gerek yok. Bu tek bayrak kesintiyi çözer ama güvenlik sorusunu çözmez, çünkü caffeinate kilidi tutarken Mac'in aşırı ısındığını veya bataryasının bitmek üzere olduğunu bilmez. İşte bir Mac'i build sırasında ücretsiz yoldan uyumaktan alıkoymanın yolu, bu ücretsiz yolun uzun bir native build'de nerede tükendiği ve LidRun'un Mac'i otomatik olarak uyanık tutup build bitince ya da donanımın mola vermesi gerektiği an uyumasına izin veren iki build farkında yöntem.
Siz uzaklaşınca bir build neden yarıda kesilir
Boşta uyku zamanlayıcısı bir build'in ne olduğunu bilmez. Girdi ve ekran etkinliğini izler, clang'in bir çeviri biriminin yarısında olup olmadığını değil. Hiç tuşa basılmadan geçen 40 dakikalık bir cargo build'i, boştaki bir makineyle tıpatıp aynı görünür, bu yüzden macOS sorumlu davranışı sergileyip uyur.
Build ortasında uykuya geçtiğinde, iş olduğu yerde durur. Hiçbir şey bozulmaz ama derleyici donar ve ısınmakta olan artımlı (incremental) önbellek ısınmayı bırakır. Mac'i uyandırırsınız, build kaldığı yerden devam eder ya da yeniden başlar, neredeyse bittiğini düşündüğünüz bekleyiş yeniden başlar.
En can sıkıcı olduğu yer, uzun ve sessiz işlerdir: tam bir Xcode arşivi, sıfırdan bir node_modules kurulumu, optimizasyonları açık bir release cargo build'i. Başlatıp unutmak istediğiniz build'ler, tam olarak boşta uyku zamanlayıcısının kesme ihtimalinin en yüksek olduğu build'lerdir.
Ücretsiz çözüm: build'i caffeinate ile sarmalayın
Herhangi bir uygulamaya uzanmadan önce, Mac'te zaten bulunan aracı deneyin. caffeinate, güç yönetimi iddialarını (assertion) tutmak için Apple'ın kendi komut satırı aracıdır ve doğrudan bir komutu sarmalayabilir: caffeinate -i cargo build --release, tam olarak o süreç çalıştığı sürece bir boşta-uyku iddiası tutar, süreç sona erer ermez de bırakır. Kendi komutunuzu koyun: caffeinate -i npm run build, caffeinate -i xcodebuild -scheme MyApp -configuration Release build, caffeinate -i make all.
Burada önemli olan -i bayrağıdır (boşta uykuyu engeller); çıktının akışını izlemek istiyorsanız -d ekranı da uyanık tutar, -w <pid> ise caffeinate'i kendiniz başlatmak yerine zaten çalışmakta olan bir sürece bağlamanızı sağlar. Başında oturduğunuz bir makinede tek seferlik bir build için bu, kurulum gerektirmeyen tamamen makul bir çözümdür ve kendi başına bilinmeye değer.
Bu, birçok kişi için gerçekten doğru ilk adımdır. Yazının geri kalanı, bunun ne zaman yetersiz kalmaya başladığı ve yetersiz kaldığında build farkında, güvenlik kontrollü bir kurulumun neye benzediğiyle ilgili.
İlgili kılavuzMac'inizi yalnızca gerçekten çalışırken uyanık tutunÜcretsiz çözümün tükendiği yer
caffeinate, Mac'in hangi durumda olduğu hakkında hiçbir fikre sahip değildir. Sıcak bir laptop'ta %8 bataryada da, hava akımı olan bir masada %90'da da aynı boşta-uyku iddiasını tutar, çünkü ikisinden birini bile okumuyordur, bir güvenlik ağı değil, bir uyanık tutma kilididir. Uzun bir release build'ini caffeinate altında gözetimsiz bırakırsanız, sizin adınıza bataryayı veya termal durumu izleyen hiçbir şey yoktur.
Ayrıca kapsamı sarmaladığınız süreçle sınırlıdır, ki bu bir açığa dönüşene kadar bir güçtür. Terminal sekmesini kapatın, bir SSH oturumunu düşürün ya da shell işinin SIGHUP almasına izin verin, nohup veya disown'ı hatırlamadıysanız iddia da onunla birlikte ölebilir, ve artık korunduğunu düşündüğünüz bir build'de korumasız kalırsınız.
Bu sorunun kapak-kapalı hali tamamen farklı bir araç: pmset -a disablesleep 1, kapağı kapalıyken bir Mac'in uyumasını durduran bayraktır (LidRun'un kendi clamshell modunun perde arkasında kullandığı bayrağın aynısı, kapandığında her zaman eşleşen bir disablesleep 0 ile birlikte). Tek bir kapak-kapalı build için elle çalıştırıp geri çevirmeyi unutursanız, o Mac'teki her gelecekteki kapak kapatma, siz hatırlayana kadar uykuyu durdurur, ki bu tek seferlik olması gereken bir işlem için gerçek bir tuzaktır.
Amphetamine, KeepingYouAwake, Lungo ve Caffeine gibi menü çubuğu araçları, hatırlama sorununu bayrak yazmaktan daha güzel bir arayüzle çözer. Özellikle Amphetamine, manuel bir açma-kapama yerine çalışan bir uygulamaya göre tetiklenebilir ve bir oturumu bitirmek için batarya seviyesi tetikleyicisi sunar, ikisi de gerçekten kullanışlı. Yayınlanmış özellik listelerine bakılırsa hiçbiri, hem batarya hem ısı üzerinde bir otomatik durdurma eşiğinin yaptığı gibi, bunu canlı termal baskıyla eşleştirmez. Belirlediğiniz zamanlama veya tetikleyiciye göre kilidi tutarlar, ne zaman bırakma vaktinin geldiğini bilmek yine size kalır.
LidRun'un uyanık tuttuğu iki build farkında yöntem
LidRun'un temel vaadi basit: ajan ya da build çalışıyorsa uyanık kal; build bittiyse ya da Mac güvensiz durumdaysa bırak ve uyumasına izin ver. Native bir build için buraya varmanın iki yolu var.
Birincisi elle uğraşmayı gerektirmez. Auto Mode, ona söylediğiniz geliştirme araçlarını süreç adına göre, ya da node ve python gibi yorumlayıcılar için komut satırına göre izler ve bunlar gerçekten çalışırken Mac'i uyanık tutar. cargo, xcodebuild, swift, swiftc, npm, node, pnpm, yarn, make, cmake, ninja, gradle, mvn ve dotnet zaten varsayılan izleme listesinde, standart bir araç zincirinde eklenecek bir şey yok. Bir süreç yalnızca CPU'su bir eşiğin (varsayılan %5, ayarlanabilir) üzerindeyken aktif sayılır, yani boşta bir Terminal Mac'i ayakta tutmaz, bir çekirdeği zorlayan bir derleyici tutar. Varsayılan 60 saniye olan ve 10 ile 600 arasında ayarlanabilen bir bekleme süresi (holdoff), son meşgul örnekten sonra iddiayı canlı tutar, böylece build aşamaları arasındaki kısa bir sessizlik kilidi düşürmez.
İkincisi ise açık bir şekilde tanımlıdır: build'i lidrun -- <your build command> ile sarmalayın, LidRun tam olarak o komutun ömrü boyunca bir uyanık-tutma iddiası tutar, komut sona erer ermez de bırakır. Komutun kendi çıkış kodu lidrun'un çıkış kodu olur, yani $? (ya da bir betikte if lidrun -- npm run build; then …) build'in geçip geçmediğini size söyler. LidRun kendi başına bir süre yazdırmaz, bunu istiyorsanız time üzerinden geçirin: time lidrun -- cargo build --release.
Gün boyu farklı projelerde build'ler gelip gidiyorsa Auto Mode daha iyidir; belirli, uzun bir komutu göz kulak olmanız gerekiyorsa ya da CI tarzı bir betiğiniz varsa wrapper daha iyidir. İkisi de Pro özelliğidir, ücretsiz katmanın parçası değildir; sade Keep Awake açma-kapama düğmesi (manuel başlat ve durdur, sonsuza dek ücretsiz) zaten aşağıda anlatılan aynı batarya ve termal güvenlik denetleyicisini taşır, sadece build'i sizin yerinize algılamaz.
Güvenlik denetleyicisi yine de geçerli
Uzun bir build için Mac'i uyanık tutmak kolay kısım. Bunu bataryayı ya da gövdeyi sessizce kızartmadan yapmak, doğru yapılmaya değer kısım, ve yukarıdaki iki moddan hangisini kullanırsanız kullanın LidRun'un uykuyu kapatıp öylece uzaklaşmamasının sebebi de bu.
Batarya: varsayılan olarak %20 olan ve %15 ile %50 arasında ayarlanabilen bir otomatik durdurma eşiği, şarj bunun altına düştüğünde tutmayı durdurur, Mac oradan itibaren tükenmeye doğru gitmek yerine normal şekilde uyumakta serbest kalır. Termal: LidRun, yalnızca kaba OS düzeyindeki okumayı değil, SoC'nin kendi sinyallerinden gelen termal baskıyı izler ve kritik bir okumada Safety Governor uyanık-tutma kilidini hemen bırakır; ayrıca "aşırı ısınınca uyut" açıksa, kilidi sadece bırakmak yerine Mac'i gerçekten uyutmaya kadar yükselebilir. Bu, riski azaltmaya yardımcı olur, aşırı ısınmayı imkansız kılmaz, hava akımı ve laptop'u nereye koyduğunuz hâlâ size kalmış bir konudur.
Bu kararların her biri bir nedenle birlikte Activity Log'a yazılır, bir batarya otomatik durdurma kaydı tetiklendiği yüzdeyi adlandırır, bir termal kayıt Safety Governor'ın geri çekildiği anlamına gelir, yani uzun bir build yarıda kesildiyse tahmin yürütmek yerine nedenini görebilirsiniz. Bu kayıt, kör bir uyanık tutma kilidi olmamanın dürüst bedeli.
Günlük build'ler için kurulum
Auto Mode: LidRun menü çubuğu simgesine tıklayın ve Auto Mode'u açın. Normal bir Xcode, npm veya cargo araç zinciri için yapılandıracak bir şey yok, araçlar zaten varsayılan izleme listesinde. clang ve swift-frontend gibi daha kapsamlı Apple alt araçları birçok ilgisiz işlem sırasında da çalışır, bu yüzden otomatik izlenmek yerine varsayılan olarak kapalı, isteğe bağlı etiketler olarak dururlar, LidRun'un onlara özellikle tepki vermesini istiyorsanız açın.
CLI wrapper: lidrun komutunu menüden bir kez kurun (bu, /usr/local/bin/lidrun konumuna küçük bir wrapper betiği yazar), sonra build'inizi onun üzerinden çalıştırın: lidrun -- cargo build --release, lidrun -- xcodebuild -scheme MyApp build, lidrun -- npm run build. Zincirlenmiş bir komut için tamamını tek bir argüman olarak tırnak içine alın, lidrun -- 'npm ci && npm run build', aksi halde shell, lidrun daha komutu görmeden && üzerinde böler ve yalnızca ilk yarı korunur. Her iki durumda da aşağı yukarı aynı kısa kuyruğu bekleyin, Auto Mode çalışan süreçleri her 10 saniyede bir yeniden kontrol eder ve varsayılan 60 saniyelik bekleme süresi boyunca tutar, yani Mac, build gerçekten bittikten sonra bir dakikadan az bir süre uyanık kalabilir. Bu beklenen bir davranıştır, hata değil.
Bir build kesintiye uğradıysa, körlemesine yeniden çalıştırmadan önce Activity Log'u açın, kayıt bunun bir batarya tabanı mı yoksa bir termal geri çekilme mi olduğunu adlandırır, buna göre batarya eşiğini yükseltebilir ya da hava akımını iyileştirebilirsiniz. Timer modu (30 dakikadan 8 saate kadar sabit ön ayarlar) farklı bir iş için farklı bir araçtır, bir şeyin tam olarak ne kadar süreceğini bildiğinizde kullanışlıdır; süresini önceden bilmediğiniz bir build için Auto Mode ya da wrapper daha uygun düşer, çünkü doğru tahmin etmeniz gereken bir saate göre değil, iş bittiğinde biterler.
Hangi modu kullanırsanız kullanın önemli olan iki alışkanlık: en ağır işleri, tam bir clean build'i, büyük bir LTO geçişini, altından hava akabilen sert ve düz bir yüzeyde çalıştırın, ve mümkünse elektriğe bağlı kalın, çünkü bataryadaki bir laptop'ın hâlâ uyması gereken bir otomatik durdurma tabanı vardır, elektrik gücü ise bu soruyu tamamen ortadan kaldırır. Build'leriniz konteynerler içinde çalışıyorsa, aynı boşta-uyku sorunu orada da geçerlidir, LidRun'un izlemesi gereken süreç farklı olduğu için Docker-build durumu ayrı ele alınıyor.
LidRun, işinizi kapak kapalıyken, pil ve sıcaklık koruması yerleşik biçimde çalışır tutar.
LidRun zaten sizde mi? Kurulum rehberini okuyun →
LidRun'u yeni mi tanıdınız? Fiyatlara bakın →
Sık sorulanlar
Hayır. lidrun -- <komut> ile iddia, komut sona erer ermez bırakılır. Auto Mode'da, izlenen hiçbir süreç CPU eşiğinin üzerinde meşgul değilken (bekleme süresi, varsayılan 60 saniye, geçtikten sonra) LidRun Mac'in yeniden uyumasına izin verir.
Evet. cargo, xcodebuild, swift, swiftc, npm, node, pnpm, yarn, make, cmake, ninja, gradle, mvn ve dotnet zaten varsayılan izleme listesinde. Bir süreç yalnızca CPU'su bir eşiğin üzerindeyken aktif sayılır, yani boşta bir shell Mac'i uyanık tutmaz, gerçek bir derleme tutar.
caffeinate, temelde aynı işi yapar, bir komutun ömrü boyunca boşta-uyku iddiası tutmak, ücretsiz olarak, tek seferlik bir build için de tamamen makul bir seçim. LidRun buna algılama ekler (wrapper'ı her seferinde yeniden yazmazsınız), körlemesine tutmak yerine batarya ve termal otomatik durdurma ekler, ve bir oturumun neden bittiğini açıklayan bir Activity Log kaydı ekler.
Kritik bir termal okumada, Safety Governor uyanık-tutma kilidini hemen bırakır ve bunu kaydeder; "aşırı ısınınca uyut" açıkken bu, Mac'i uyutmaya kadar yükselebilir. Bu, riski azaltmaya yardımcı olur, ama bir Mac'in asla aşırı ısınmayacağını garanti edemez, yerleşim ve hava akımı hâlâ sizin sorumluluğunuzdadır.
Evet, belirlediğiniz otomatik durdurma eşiği dahilinde (varsayılan %20, %15 ile %50 arasında ayarlanabilir). Şarj bunun altına düştüğünde LidRun, sıfıra doğru tüketmek yerine oturumu temiz bir şekilde bitirir. En ağır build'ler için elektriğe bağlı kalmak yine de daha güvenli seçimdir.
Auto Mode ve CLI wrapper, Pro özellikleridir. Manuel Keep Awake, Timer ve Charging-only modları sonsuza dek ücretsizdir ve zaten aynı batarya ve termal güvenlik denetleyicisini çalıştırır, sadece LidRun build'i algılamak yerine bunları kendiniz başlatıp durdurursunuz.