Câu trả lời:
at 18:00 shutdown now
tạ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 at
trình nền hoặc có thể là cron
trình nền, tùy thuộc vào hệ thống của bạn.
shutdown 18:00
bắ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:00
sẽ tạo một /run/nologin
tệ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.
nohup
hoặc disown
hoặ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 shutdown
quá 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 cron
thay 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 now
vẫn lên lịch thông qua at
hệ thống con, nhưng shutdown
lệ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à systemctl
chương trình của systemd . systemctl
làm những điều khác nhau.
Trước hết, systemctl
gử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 at
trường hợp. Tuy nhiên, đây là một hệ thống, cụ thể logind
( systemd-shutdownd
dmon đã 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à at
hệ thống con. systemctl
nó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 at
trường hợp, không có shutdown
quá trình ngồi đó đếm ngược và sinh ra các wall
tin 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 at
trường hợp, nhưng chúng được phát hành bởi logind
. Cũng không giống như at
trườ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 at
công việc và Bộ công cụ chính sách sẽ áp dụng các quy tắc để shutdown
chạy trong ngữ cảnh không đăng nhập như một at
công việc khác với quy tắc được áp dụng để shutdown
chạ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:00
Bắ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?