tắt máy vào ngày cụ thể


11

Tôi biết rằng bạn có thể lên lịch tắt máy trong một thời gian cụ thể shutdown -h 21:45và bạn không nên sử dụng crontabs cho những việc như vậy vì tính chất lặp đi lặp lại của chúng. Làm cách nào tôi có thể lên lịch tắt máy cho một ngày cụ thể như ngày 31 tháng 8 lúc 20:00 tối?

Câu trả lời:


7

Các phiên bản Ubuntu gần đây sử dụng systemd và khi bộ lập lịch thông thường atdvà liên kết atcho các lệnh một lần không được cài đặt hoặc không chạy lệnh một lần có thể được lên lịchsystemd-run dễ dàng hơn so với việc tạo thủ công systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now

2
Điều trớ trêu là việc bắt đầu toàn bộ dịch vụ để làm việc này gần như không cần thiết. Cơ chế tắt máy của systemd tự hỗ trợ các điểm tùy ý. Công cụ dòng lệnh của nó đơn giản là không cung cấp khả năng truy cập này, bởi vì nó không ngang với dòng lệnh của BSD shutdown. Như tôi đã viết trong một câu trả lời khác, những người muốn điều này có thể thử thuyết phục những người có hệ thống để làm cho shutdowncông cụ của họ có khả năng hơn, với cú pháp của hàng thập kỷ, thay vì đi quanh các ngôi nhà systemd-run.
JdeBP

Tôi nhận được thông số lịch không hợp lệ: 2019-08-31 20:00:00 CET
Tải lên HdM

12

Các atlệnh là dành cho một lịch trình tắt hành trong tương lai.

ví dụ

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

("<EOT>" được tạo bằng cách nhấn control-D)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

Bạn có thể đặt shutdownlệnh của bạn ở đây.


Đúng! Tôi đã quên mất atkhi tôi đăng bài - atnói chung là có ý nghĩa cho việc này, mặc dù trong một công ty, phương thức được chấp nhận có thể athoặc cron, tùy thuộc vào các quy ước liên quan đến quản lý / triển khai cấu hình.
Flow2k

Nó không chính xác tương đương, lưu ý. unix.stackexchange.com/q/465322/5132
JdeBP

atcũng có thể nhận lệnh từ một đường ống : echo "echo yup > $(tty)" | at now.
mosvy

7

Mặc dù atlà cách rõ ràng để làm điều này, tôi nghĩ rằng nó sẽ tồn tại khi tắt máy, vì vậy nếu máy khởi động lại trước khi tắt máy theo lịch trình, nó có thể tắt máy một lần nữa vào thời gian đã lên lịch. Do đó, bằng cách sử dụng bash và ngày GNU, chúng ta có thể sử dụng tắt máy bị trì hoãn.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: Điều này chỉ chính xác đến một phút. Nó hoạt động bằng cách chuyển đổi thời gian đã lên lịch và bây giờ thành giây kể từ thời kỳ UNIX, tính toán sự khác biệt, chuyển đổi thành phút và sau đó sử dụng điều này làm độ trễ để tắt máy. Nó sẽ không hoạt động chính xác nếu thời gian dự kiến ​​là trong quá khứ.


3

Bạn sử dụng một shutdownlệnh tốt hơn .

Các lệnh van Smoorenburg, Upstart và systemd shutdownkhông cho phép đặc tả ngày. Nhưng shutdownlệnh BSD lấy một giá trị ngày trong thông số kỹ thuật của nó khi nào sẽ tắt, trong biểu mẫu yymmddhhmm. Đây là trường hợp kể từ 4BSD, và vẫn như vậy với FreeBSD và OpenBSD. NetBSD mở rộng nó đến ccyymmddhhmm.

Bởi vì bộ công cụ nosh cũng có thể sử dụng được trên BSD, tôi đã cho shutdownlệnh của mình khả năng tương tự, mở rộng nó cho CCYYMMDDHHMMmỗi NetBSD. Và bởi vì bộ công cụ nosh cũng có thể sử dụng được trên Linux, điều đó mang lại cho Linux lệnh tắt máy mất ngày.

Nó tất nhiên hoạt động với nosh system-manager. Nó cũng hoạt động với một số hệ thống khác. Nó gửi tín hiệu đến quá trình # 1 để ban hành công cụ và các tín hiệu tương tự được hiểu bởi một số người quản lý hệ thống khác, chẳng hạn như systemd, cũng có thể bị tắt khi sử dụng nó.

Bạn có thể sử dụng nó, hoặc một công cụ như nó; hoặc bạn có thể cố gắng thuyết phục các tác giả của các shutdownchương trình Linux khác mở rộng các công cụ của họ để có khả năng như BSD shutdown.

đọc thêm

  • Jonathan de Boyne Pollard (2018). shutdown. trang hướng dẫn sử dụng bộ công cụ nosh. Phần mềm.
  • Jonathan de Boyne Pollard (2018). system-manager. trang hướng dẫn sử dụng bộ công cụ nosh. Phần mềm.
  • shutdown. Hướng dẫn quản lý hệ thống . Trang hướng dẫn NetBSD. 2011-11-04.
  • shutdown. Hướng dẫn quản lý hệ thống FreeBSD . 2018-01-01.
  • shutdown. Trang hướng dẫn OpenBSD. 2015-01-21.
  • /unix//a/465337/5132

1

Để điều hành công việc chỉ trong năm nay:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

Để điều hành công việc hàng năm:

0 20 31 8 * /sbin/shutdown now

-4

Có thể có một tùy chọn để nhập năm cho shutdownlệnh, nhưng cron có thể được sử dụng để chỉ chạy một lần tại một thời điểm cụ thể. Ví dụ của bạn, hãy thử

0 0 31 8 ? 2019  shutdown

Cẩn thận: ở trên không phải là cú pháp cron tiêu chuẩn.


2
1. Điều này không nói 20:00 tối, nó nói nửa đêm. 2. Tôi chưa bao giờ thấy một cronjob với các trường SIX cho thời gian. Bạn đang tham khảo cron nào?
tự đại diện

2
Không có một yearlĩnh vực trong crontablịch trình
Seamus

Tôi nhận ra sau đó cú pháp này không phải là "cron chuẩn", vì vậy tôi đồng ý, nó không nên được sử dụng theo mệnh giá. OP dường như ngụ ý rằng có một hình phạt hiệu suất liên quan đến việc sử dụng cron, vì vậy trong Câu trả lời của tôi, tôi đã tìm cách làm rõ - không có bất kỳ sự không hiệu quả nào về việc triển khai cron không phù hợp cho nhiệm vụ một lần. Đây có phải là những gì bạn nghĩ là tốt?
Flow2k
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.