caffeinate trên Mac: ví dụ lệnh, giới hạn và lựa chọn an toàn hơn cho workflow AI

Henry AGI
6 phút đọcJun 2026
caffeinate trên Mac: ví dụ lệnh, giới hạn và lựa chọn an toàn hơn cho workflow AI

caffeinate là công cụ dòng lệnh có sẵn trên mọi Mac, giúp giữ máy thức mà không cần mở System Settings — chạy một mình, nó chặn idle sleep cho tới khi bạn nhấn Ctrl-C; thêm -t 3600 thì nó tự dừng sau một giờ; hoặc bọc quanh một lệnh thì nó chỉ giữ Mac thức trong lúc lệnh đó đang chạy. Thứ nó không đụng tới là sleep khi đóng nắp, mức pin, hay nhiệt độ: đóng nắp lại là MacBook ngủ, bất kể caffeinate đã chạy bao lâu. Dưới đây là các lệnh thực tế, những cách miễn phí để lách giới hạn đóng-nắp (kể cả một cách mà hầu như không ai từng nghe tới), và đâu là chỗ một công cụ chú trọng an toàn như LidRun tiếp quản sau khi caffeinate dừng lại.

Lệnh caffeinate thực sự làm gì

caffeinate là một tiện ích dòng lệnh nhỏ, đã đi kèm macOS từ nhiều năm nay. Nó tạo ra một power management assertion — một yêu cầu gửi tới hệ thống là đừng ngủ — trong suốt thời gian nó chạy, rồi tự động giải phóng assertion đó ngay khi thoát. Không có bước "tắt lại" riêng nào cả — điều này sẽ quan trọng ở phần sau của bài, khi ta nói tới một cách lách không tự giải phóng như vậy.

Chạy nó không kèm flag nào thì mặc định nó chặn idle sleep. Thêm các flag cụ thể cho các assertion cụ thể: -d giữ luôn cả màn hình không ngủ, -m giữ ổ đĩa không quay chậm lại, -s ngăn system sleep (nhưng chỉ khi đang cắm sạc), và -u khai báo user đang hoạt động, việc này đánh thức màn hình và tương đương gần như -d -t 5. Các flag này cộng dồn với nhau — chúng là những assertion riêng biệt, có thể kết hợp, chứ không phải một công tắc tổng. Chạy caffeinate -d -i là bạn đang giữ hai lock độc lập, cả hai đều phải kết thúc thì Mac mới ngủ lại được.

Điểm hữu ích cho dev là caffeinate không có GUI, không có icon trên menu bar, không có file cấu hình. Nó được thiết kế để đưa vào script — khởi động, chạy, rồi giải phóng mà không cần đụng tới bảng cài đặt nào. Với một phiên terminal hay một script có điểm bắt đầu và kết thúc rõ ràng, đây đúng là công cụ phù hợp.

Ví dụ lệnh caffeinate — và cách kiểm tra nó có thực sự hoạt động

Dạng đơn giản nhất chỉ là caffeinate, chạy trong một cửa sổ terminal bạn để mở — nó chặn idle sleep cho tới khi bạn nhấn Ctrl-C hoặc đóng cửa sổ.

LidRun
Terminal showing caffeinate command examples and confirming an active assertion with pmset -g assertions
Một lần chạy có giới hạn thời gian, một build command được bọc bên trong, và cách xác nhận caffeinate thực sự đang giữ Mac không ngủ.

Muốn giữ trong một khoảng thời gian cố định, caffeinate -t 3600 giữ Mac thức đúng một giờ, rồi tự thoát và giải phóng assertion — không cần nhớ để tắt nó.

Với một job cụ thể, bọc trực tiếp quanh lệnh: caffeinate -i npm run build chỉ giữ Mac thức trong lúc build đó chạy, và giải phóng ngay khi nó xong hoặc lỗi. Cách làm này áp dụng tương tự cho caffeinate -i ./deploy.sh, một lệnh rsync dài, hay bất kỳ lệnh nào khác có điểm bắt đầu và kết thúc rõ ràng. Nếu bạn không tự khởi chạy tiến trình đó — chẳng hạn một build được kích hoạt từ IDE — thì caffeinate -w <pid> sẽ chờ theo một process ID có sẵn thay vì bọc lệnh.

Cron job chạy không có terminal tương tác, nên bọc job trong caffeinate là cách làm phổ biến cho bất cứ thứ gì lên lịch chạy qua đêm: 0 2 * * * /usr/bin/caffeinate -i /path/to/nightly-backup.sh giữ Mac thức đúng bằng thời lượng backup, không hơn.

Để xác nhận caffeinate đang thực sự giữ Mac thức, chạy pmset -g assertions — lệnh này liệt kê mọi power assertion đang hoạt động cùng tiến trình sở hữu nó; tìm PreventUserIdleSystemSleep cạnh PID của caffeinate. Cách kiểm tra đơn giản hơn, nếu chỉ cần biết tiến trình còn sống, là ps aux | grep caffeinate.

Mỗi lần gọi caffeinate giữ một assertion độc lập riêng, nên chạy hai hay ba lần cùng lúc cũng không sao — Mac vẫn thức miễn còn ít nhất một lệnh đang sống, và kill một lệnh không giải phóng các lệnh còn lại.

Hướng dẫn liên quanLidRun vs caffeinate: công cụ giữ Mac thức nào hợp với workflow của bạn?

Giới hạn của caffeinate: đóng nắp, pin, và nhiệt độ

Với đúng công việc của nó — chặn idle sleep trong lúc chạy script, build, hay một phiên terminal bạn đang theo dõi — caffeinate làm đúng như tên gọi, không cần dependency, không cần cài đặt gì thêm.

Giới hạn của nó lộ ra rõ nhất ở việc làm việc với nắp đóng, và đây chính là chỗ các AI coding agent và workload dev gặp rắc rối: một đợt refactor dài trong Claude Code, một Docker image đang build, một model Ollama đang tải về — toàn những việc người ta muốn giữ chạy khi đóng nắp, để trên bàn, nhét trong túi giữa các cuộc họp, hay để qua đêm. Assertion của caffeinate không ghi đè được lệnh sleep mà macOS kích hoạt khi đóng nắp; MacBook vẫn ngủ khi đóng nắp dù caffeinate đang chạy, chấm hết.

Nó cũng không có khái niệm gì về mức pin hay nhiệt độ. Chạy caffeinate -t 28800 cho một phiên tám giờ trên pin, nó sẽ giữ assertion suốt thời gian đó bất kể pin tụt xuống bao thấp, và không có cách nào nhận ra Mac đang nóng lên trong túi để tự rút lui.

Nó cũng thủ công và stateless — không nhận biết được thứ gì thực sự đang chạy, không nhớ gì giữa các phiên. Mỗi lần bạn lại phải gõ lại flag và lệnh đích từ đầu.

Những cách miễn phí để giữ MacBook thức khi đóng nắp

Cách được Apple hỗ trợ chính thức không cần thêm phần mềm nào cả: cắm màn hình ngoài, bàn phím hoặc chuột ngoài, và sạc điện, thì MacBook sẽ không ngủ khi đóng nắp. Đây chính là true clamshell mode, và macOS xử lý việc này ngay trong hệ thống một khi cả ba thứ đã được cắm — không cần dòng lệnh nào.

Không có màn hình ngoài — chạy bằng pin, đóng nắp, không có monitor — thì đòn bẩy công khai duy nhất chặn được sleep khi đóng nắp là một lệnh hoàn toàn khác caffeinate: sudo pmset -a disablesleep 1. Nó hoạt động, nhưng là một công cụ nặng đô hơn caffeinate nhiều. Nó cần mật khẩu admin, và không như assertion của caffeinate, nó không tự giải phóng khi tiến trình thoát — đây là một thiết lập bền, áp dụng toàn hệ thống, giữ nguyên hiệu lực cho tới khi bạn tự tay chạy sudo pmset -a disablesleep 0 hoặc khởi động lại Mac.

Ngoài dòng lệnh, một số app menu-bar bọc lại cùng ý tưởng cơ bản đó dưới dạng GUI. Amphetamine (miễn phí, trên Mac App Store) thêm nhiều trigger phong phú — mở app, giờ trong ngày, mạng Wi-Fi, mức pin — trên nền cùng một kiểu assertion. KeepingYouAwake là một front-end menu-bar miễn phí, mã nguồn mở, về cơ bản giữ máy thức theo kiểu caffeinate. Lungo là một toggle menu-bar tối giản, bấm một cái là xong, có timer tích hợp sẵn. Caffeine là cái toggle icon-tách-cà-phê kinh điển mà cả thể loại này được đặt tên theo, có cả bản miễn phí lẫn trả phí qua nhiều năm. Tất cả đều làm tốt đúng một việc chúng được sinh ra để làm — một công tắc giữ-thức bật/tắt thủ công — và không cái nào được thiết kế để trả lời "việc thật có còn đang chạy không", "pin còn bao nhiêu", hay "Mac này có đang quá nóng không", vì đó không phải việc của một công tắc giữ-thức.

Rủi ro trong cách lách thủ công

Flag disablesleep là phần đáng để cẩn thận nhất. Vì nó áp dụng toàn hệ thống và bền, nếu script hay phiên đã bật nó lên 1 bị crash — hay đơn giản là bạn quên chạy lệnh reset — Mac sẽ không ngủ bình thường lại được nữa, dù mở hay đóng nắp, cho tới khi có ai đó chạy lệnh về 0 hoặc khởi động lại máy. Vô tình để nó bật qua đêm là một khoản hao pin thật, hoàn toàn có thể tránh được, và một cái Mac chẳng bao giờ được nghỉ như một chiếc laptop đáng ra phải được nghỉ.

Chạy tính toán với nắp đóng cũng cắt mất một phần đường thoát nhiệt bình thường của Mac — luồng khí quanh bàn phím và bản lề phần nào phụ thuộc vào việc nắp có mở hay không. Dù bạn dùng cách nào để giữ một Mac đóng nắp thức, hãy để nó thông thoáng — một cái đế, một cái túi mở, chứ đừng chất chồng dưới đồ đạc khác — thay vì chỉ tin vào phần mềm để quản lý nhiệt.

Không cái nào trong các lựa chọn miễn phí ở trên — caffeinate, flag disablesleep, hay các toggle menu-bar — gắn với việc thứ bạn thực sự quan tâm (build, agent, render) có còn đang chạy hay không. Chúng giữ Mac thức theo timer hoặc theo một công tắc thủ công, nghĩa là hoặc bạn phải canh chừng nó, hoặc bạn chấp nhận rủi ro nó vẫn thức, vẫn nóng, và vẫn hao pin rất lâu sau khi việc đã xong từ đời nào.

Một cách làm an toàn hơn cho workload AI và dev

Cách khắc phục không phải là một mẹo chống-ngủ khác — mà là ghép cùng cơ chế đó với các lớp bảo vệ gắn với những gì đang thực sự diễn ra trên Mac, chứ không phải một cái timer. Closed-Lid mode của LidRun dùng chính đòn bẩy pmset -a disablesleep đó bên dưới, không phải một API riêng nào — nhưng nó luôn ghép số 1 với một số 0 tương ứng: khi dừng, khi thoát app, và được đối chiếu lại ngay lần khởi động kế tiếp nếu phát hiện một số 1 còn sót lại từ một lần crash. Đó là khác biệt giữa một đòn bẩy ai cũng bật được, và một đòn bẩy không thể vô tình bị kẹt ở trạng thái bật.

Thêm vào đó, nó tự nhận diện công việc thật thay vì chạy theo một cái timer vô tri: Claude Code, Cursor, Codex, Aider, Cline, Ollama, LM Studio, và cả chục coding agent cùng công cụ chạy model cục bộ khác, cộng thêm các tiến trình dev nói chung. Nó tính việc một agent chỉ đơn thuần đang có mặt là "đang làm việc", vì một coding agent đang chờ phản hồi từ API có thể ngồi ở mức CPU gần như bằng 0 giữa lúc tác vụ chưa xong — một phép kiểm tra CPU đơn thuần sẽ hiểu nhầm khoảng lặng đó là "đã xong".

Nó cũng đặt điều kiện cho mọi phiên dựa trên hai thứ mà caffeinate hoàn toàn bỏ qua. Một mức tự-dừng theo pin có thể chỉnh, mặc định 20%, kết thúc phiên trước khi pin xuống mức nguy hiểm, và một ngưỡng khẩn cấp không thể tắt — mặc định 4%, chỉnh được lên tới 8% — buộc máy ngủ để bảo vệ Mac bất kể các thiết lập khác là gì. Một lớp bảo vệ nhiệt đọc nhiệt độ chip thực tế và tín hiệu thermal-throttle của CPU, chứ không chỉ dựa vào cờ nhiệt hệ thống thô sơ mà hầu hết công cụ khác dùng nếu có theo dõi nhiệt độ, và tự động tắt Closed-Lid mode nếu Mac thực sự đang quá nóng. Đây không phải một wake lock mù quáng — an toàn thắng tiện lợi mỗi khi hai thứ xung đột nhau.

Nói ngắn gọn và thành thật: agent đang chạy → giữ thức; agent xong việc, hoặc Mac không còn an toàn để tiếp tục chạy → giải phóng và để nó ngủ. Các chế độ Keep Awake, Timer, và Charging-only chạy miễn phí vĩnh viễn, không dùng thử, không giới hạn số phiên. Hỗ trợ Closed-Lid nằm trong gói Pro trả phí, với một số lượt chạy Closed-Lid miễn phí để dùng thử trước khi quyết định.

Thử nó thay vì vật lộn với ngủ khi gập má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.

Tải cho macOS

Đã có LidRun? Đọc hướng dẫn thiết lập →

Mới biết đến LidRun? Xem bảng giá →

Câu hỏi thường gặp

caffeinate có giữ Mac thức khi đóng nắp không?

Không — assertion của caffeinate không ghi đè được lệnh sleep mà macOS kích hoạt khi đóng nắp. MacBook vẫn ngủ khi đóng nắp dù caffeinate đang chạy, trừ khi nó đang ở true clamshell mode (đã cắm màn hình ngoài, bàn phím, và nguồn điện) hoặc đã bật disablesleep qua pmset.

Làm sao để chạy caffeinate trong một khoảng thời gian cố định?

Dùng flag -t với số giây, ví dụ caffeinate -t 3600 cho một giờ. caffeinate sẽ tự thoát và giải phóng assertion khi hết giờ — không cần nhấn Ctrl-C.

caffeinate có thể giữ Mac thức chỉ cho một lệnh duy nhất không?

Có — bọc trực tiếp quanh lệnh, như caffeinate -i npm run build. Mac chỉ thức trong lúc lệnh đó đang chạy, và assertion giải phóng ngay khi nó thoát. caffeinate -w <pid> làm điều tương tự cho một tiến trình bạn không tự khởi chạy.

Làm sao để kiểm tra caffeinate có đang chạy không?

Chạy pmset -g assertions để xem mọi power assertion đang hoạt động và tiến trình nào sở hữu nó — tìm PreventUserIdleSystemSleep cạnh PID của caffeinate. ps aux | grep caffeinate cũng dùng được, nếu bạn chỉ cần xác nhận tiến trình còn sống.

Khác biệt giữa caffeinate và pmset disablesleep là gì?

caffeinate chỉ chặn idle sleep, và chỉ trong lúc tiến trình của nó đang chạy — nó không ghi đè được sleep khi đóng nắp, và tự giải phóng khi thoát. sudo pmset -a disablesleep 1 là một đòn bẩy khác, nặng đô hơn, có chặn được cả sleep clamshell (đóng nắp), nhưng nó áp dụng toàn hệ thống và bền: giữ nguyên hiệu lực toàn máy cho tới khi bạn tự tay đặt lại về 0 hoặc khởi động lại, nên rất dễ vô tình để nó bật quên.

Có lựa chọn nào an toàn hơn caffeinate cho workload AI và dev không?

Với các phiên terminal ngắn, có người theo dõi, caffeinate thực sự là đủ. Còn với các lượt chạy AI/dev đóng nắp hoặc không ai canh, LidRun thêm một lớp tự nhận diện agent và hỗ trợ Closed-Lid trên cùng ý tưởng cơ bản đó, kèm tự-dừng theo pin và nhiệt để Mac không tiếp tục thức, nóng, và hao pin sau khi việc đã thực sự xong.

Bạn đang tò mò LidRun có hợp với mình không?

Cứ để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm vào bên dưới xem AI thực sự nghĩ gì về LidRun.

caffeinate trên Mac: ví dụ lệnh, giới hạn và lựa chọn an toàn hơn cho workflow AI