Ngăn Mac ngủ khi đang chạy một bản build lâu
Một bản build sạch trên Xcode, một lượt compile cargo từ đầu, một lượt npm install phải tải về cả thế giới — những thứ này thường chạy lâu hơn bộ hẹn giờ ngủ rảnh của macOS. Bạn bước đi, Mac ngủ, và quay lại thấy bản build đứng yên giữa chừng. Đây là cách ngăn Mac ngủ khi đang build mà không chỉ tắt phắt chế độ ngủ rồi cầu may.
Vì sao một bản build chết khi bạn bước đi
Bộ hẹn giờ ngủ rảnh không biết một bản build là gì. Nó theo dõi thao tác nhập và hoạt động màn hình, chứ không phải việc clang đang xử lý dở một translation unit. Một bản build cargo 40 phút không có phím bấm nào trông y hệt một cỗ máy đang rảnh, nên macOS làm điều có trách nhiệm là cho máy ngủ.
Khi máy ngủ giữa lúc build, công việc dừng lại ngay tại chỗ. Không có gì hỏng, nhưng trình biên dịch bị đóng băng, và bất kỳ cache tăng dần nào đang ấm lên cũng ngừng ấm. Bạn đánh thức Mac, bản build chạy tiếp hoặc khởi động lại, và lượt chờ bạn tưởng sắp xong lại bắt đầu từ đầu.
Khó chịu nhất là ở những job dài và yên ắng: một lượt archive Xcode đầy đủ, một node_modules mới tinh, một lượt cargo build bản release bật tối ưu. Đúng những bản build bạn muốn khởi động rồi mặc kệ lại chính là những bản dễ bị bộ hẹn giờ rảnh ngắt nhất.
Hai cách giữ bản build thức
Cách thứ nhất là tự động hoàn toàn. Auto Mode của LidRun theo dõi những công cụ dev mà bạn khai báo — theo tên tiến trình, hoặc theo dòng lệnh với các trình thông dịch như node và python — và giữ Mac thức khi chúng thực sự đang làm việc. Một tiến trình chỉ được tính là đang hoạt động khi CPU của nó vượt một ngưỡng, nên một Terminal rảnh không giữ máy thức; một trình biên dịch đang ghim một nhân thì có. Một khoảng holdoff giữ assertion sống thêm vài giây sau mẫu bận cuối cùng để một quãng lặng ngắn giữa các pha build không làm rớt khóa.
Cách thứ hai là tường minh. Bọc bản build bằng lidrun -- <lệnh build của bạn> và LidRun giữ một assertion thức đúng bằng vòng đời của lệnh đó, rồi nhả nó ngay khi lệnh kết thúc. Bạn nhận lại exit code và thời lượng, nên một script có thể biết bản build có pass hay không. Đây là lựa chọn gọn gàng nhất cho các lượt chạy một phát kiểu CI và các script qua đêm, khi bạn biết trước lệnh.
Auto Mode hợp hơn khi các bản build đến rồi đi suốt ngày; còn cách bọc lidrun -- hợp hơn khi bạn có một lệnh dài cụ thể cần canh. Cả hai đều kết thúc việc giữ thức khi công việc kết thúc, thay vì ghim Mac thức vô thời hạn.
Hướng dẫn liên quanGiữ Mac thức chỉ khi nó thật sự đang làm việcBộ điều phối an toàn vẫn luôn áp dụng
Giữ Mac thức cho một bản build lâu là phần dễ. Làm được điều đó mà không âm thầm nướng chín pin hay thân máy mới là phần đáng làm cho đúng, và đó là lý do LidRun không chỉ tắt chế độ ngủ rồi bỏ đi.
Mọi quyết định giữ thức đều được kiểm soát theo mức pin, trạng thái nhiệt, và việc bạn đang cắm sạc hay chạy không người trông. Một bản build release nặng có thể làm một chiếc laptop bị giới hạn quạt nóng lên; nếu áp lực nhiệt leo quá cao, hoặc mức pin tụt qua ngưỡng bạn đặt, LidRun để Mac ngủ thay vì ép phần cứng. Điều này giúp giảm rủi ro — nó không khiến việc quá nhiệt trở nên bất khả, và luồng khí vẫn là chuyện của bạn.
Các quyết định đó được ghi vào Activity Log, nên nếu một bản build dài bị cắt ngang vì giới hạn nhiệt hoặc pin, bạn có thể thấy lý do thay vì phải đoán. Một bộ hẹn giờ phiên một, ba hoặc tám tiếng cũng đặt mức trần cho mọi lượt chạy, nên một bản build treo mãi không làm Mac thức suốt đêm.
Thiết lập cho các bản build hằng ngày
Đặt Mac trên mặt phẳng cứng, thoáng khí phía dưới trong lúc một bản build dài chạy. Một lượt compile nặng sinh nhiệt thật; giường hay túi đóng kín giữ lại nhiệt đó, và không thiết lập phần mềm nào thay đổi được điều ấy.
Với những job nặng nhất — một bản build sạch đầy đủ, một lượt LTO lớn — hãy cắm sạc nếu có thể. Khi chạy pin LidRun vẫn giữ bản build thức, nhưng nguồn điện loại bỏ câu chuyện hao pin và để lượt chạy hoàn tất mà không cần mức sàn pin can thiệp.
Nếu bản build của bạn chạy trong container, vấn đề ngủ rảnh tương tự cũng xảy ra ở đó; góc nhìn cho build Docker được trình bày riêng. Với các toolchain gốc — Xcode, npm hoặc pnpm, cargo, make — Auto Mode cộng với cách bọc lidrun -- đã bao quát gần như mọi tình huống bạn gặp hằng ngày.
LidRun giữ công việc của bạn chạy tiếp khi đóng nắp, với cơ chế bảo vệ pin và nhiệt tích hợp sẵn.
Câu hỏi thường gặp
Không. Với lidrun -- <lệnh> assertion được nhả ngay khi lệnh kết thúc. Trong Auto Mode, một khi không còn tiến trình được theo dõi nào bận vượt ngưỡng CPU (qua khỏi holdoff), LidRun để Mac ngủ lại.
Nó phát hiện những công cụ dev bạn cấu hình, theo tên tiến trình hoặc theo dòng lệnh với trình thông dịch. Một tiến trình chỉ được tính là đang hoạt động khi CPU vượt ngưỡng, nên một lượt compile thật giữ Mac thức còn một shell rảnh thì không.
Nếu áp lực nhiệt leo quá cao, LidRun để Mac ngủ thay vì ép phần cứng, và ghi lại quyết định đó. Điều này giúp giảm rủi ro, nhưng không thể bảo đảm Mac không bao giờ quá nhiệt — cách đặt máy và luồng khí vẫn là trách nhiệm của bạn.
Có, trong giới hạn mức sàn pin bạn đặt. Khi mức pin tụt qua ngưỡng đó, LidRun kết thúc phiên một cách gọn gàng thay vì cạn về không. Với những bản build nặng nhất, cắm sạc vẫn là lựa chọn an toàn hơn.