Câu trả lời:
at 18:00 shutdown nowtạo một công việc "tại", được thực hiện tại thời điểm được chỉ định bởi attrình nền hoặc có thể là crontrình nền, tùy thuộc vào hệ thống của bạn.
shutdown 18:00bắt đầu một quá trình trong shell của bạn chờ đến thời gian quy định và sau đó thực hiện tắt máy. Lệnh này có thể được chấm dứt nếu ví dụ: phiên shell của bạn bị chấm dứt.
Kết quả cuối cùng trong hầu hết các trường hợp sẽ giống nhau: hệ thống ngừng hoạt động lúc 18:00.
Một điểm khác biệt là nếu bạn sử dụng at, công việc sẽ được lưu trữ và nếu hệ thống bị tắt bởi một số phương tiện khác trước 18:00, khi khởi động lại, công việc vẫn sẽ chờ để được chạy; nếu thời gian đã trôi qua, việc tắt máy sẽ được thực hiện ngay lập tức, điều này có thể khá bất ngờ.
Một sự khác biệt nữa là shutdown 18:00sẽ tạo một /run/nologintệp 5 phút trước thời gian dự kiến để ngăn mọi người đăng nhập sau thời điểm đó. Ngoài ra tin nhắn quảng bá sẽ được gửi để cảnh báo người dùng đã đăng nhập rằng hệ thống sắp bị tắt.
Bạn cần tính đến những khác biệt này để quyết định sử dụng.
nohuphoặc disownhoặc bất cứ điều gì, nếu đăng xuất thường giết chết chạy quá trình nền. Các hệ thống khác nhau có thể có mặc định khác nhau cho điều đó. (Tôi giả định rằng có thực sự là một sudo shutdownquá trình vẫn chạy, chứ không phải nó chỉ phát tín hiệu initđể bắt đầu một giờ tắt máy Sức mạnh sau thực sự là những gì xảy ra, nhưng tôi đã không kiểm tra gần đây Oh, nhưng @JdeBP có;.. Xem câu trả lời rằng )
atđể nó hoạt động thông qua cronthay vì atd?
Nếu bạn có CentOS 7, bạn có một hệ điều hành systemd và câu trả lời là khác nhau.
at 18:00 shutdown nowvẫn lên lịch thông qua athệ thống con, nhưng shutdownlệnh đó , cũng như lệnh mà bạn gọi trực tiếp shutdown 18:00, thì khác. Đó thực sự là systemctlchương trình của systemd . systemctllàm những điều khác nhau.
Trước hết, systemctlgửi yêu cầu tắt máy theo lịch trình để được xử lý bởi một dæmon, khá giống như trong attrường hợp. Tuy nhiên, đây là một hệ thống, cụ thể logind( systemd-shutdownddmon đã bị xóa khỏi systemd vào tháng 5 năm 2015, sự thay đổi đã được chuyển qua các phiên bản nhỏ hơn của CentOS 7), không phải là athệ thống con. systemctlnói một giao thức nội bộ với một nhà môi giới Desktop Bus (toàn hệ thống) mà lần lượt giao tiếp với logind.
Vì vậy, giống như trong attrường hợp, không có shutdownquá trình ngồi đó đếm ngược và sinh ra các walltin nhắn. Vì vậy, người ta có thể đăng xuất và điều này sẽ không ảnh hưởng đến lịch trình và việc hủy bỏ không đơn giản chỉ đơn giản là làm gián đoạn / giết chết quá trình tiền cảnh của phiên đăng nhập. Cũng giống như với at.
Vẫn có tin nhắn, không giống như trong attrường hợp, nhưng chúng được phát hành bởi logind. Cũng không giống như attrường hợp, công việc được lên lịch không tiếp tục khởi động lại trên toàn hệ thống, do đó, việc tắt máy thực tế sẽ hủy công việc theo lịch trình. Có là một tập tin trong hệ thống tập tin, nhưng nó là dưới /run/systemd/shutdownđó là lưu trữ không liên tục.
Sự khác biệt nữa là chỉ có thể có một lần tắt theo lịch trình tại một thời điểm, trong khi một người có thể gửi nhiều atcông việc và Bộ công cụ chính sách sẽ áp dụng các quy tắc để shutdownchạy trong ngữ cảnh không đăng nhập như một atcông việc khác với quy tắc được áp dụng để shutdownchạy trong bối cảnh đăng nhập phiên. Cái sau có thể được cho phép nhiều hơn, cho phép (giả sử) một người dùng không có quyền được đăng nhập vào phiên đăng nhập hoạt động để tắt hệ thống.
shutdown 18:00Bắt đầu một quá trình trong vỏ của bạn chờ". Nếu bạn đăng xuất trước đó thì sao?