Làm cách nào để tắt Linux tại một datetime cụ thể từ thiết bị đầu cuối?


46

Có vẻ như tôi có thể tắt máy bằng sudo shutdowncách chỉ định thời gian hoặc phút.

Có cách nào để xác định datetime cho tắt máy không?

Câu trả lời:


77

Bạn có thể làm điều này trực tiếp từ shutdown command, xem man shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Ví dụ:

shutdown -h 21:45

Điều đó sẽ chạy shutdown -hlúc 21 giờ 45 phút.


Đối với các lệnh không cung cấp chức năng này, bạn có thể thử một trong:

A. Sử dụng tại

Các atdaemon được thiết kế cho chính xác này. Tùy thuộc vào hệ điều hành của bạn, bạn có thể cần phải cài đặt nó. Trên các hệ thống dựa trên Debian, điều này có thể được thực hiện với:

sudo apt-get install at

Có ba cách đưa ra lệnh cho at:

  1. Ống nó:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Lưu lệnh bạn muốn chạy trong tệp văn bản, rồi chuyển tệp đó sang at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Bạn cũng có thể truyền atlệnh từ STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Sau đó, nhấn CtrlDđể thoát khỏi atvỏ. Các lslệnh sẽ được chạy trong một phút.

Bạn có thể đưa ra thời gian rất chính xác theo định dạng [[CC]YY]MMDDhhmm[.ss], như trong

$ at -t 201403142134.12 < script.sh

Điều này sẽ chạy tập lệnh script.shvào lúc 21 giờ 34 phút và 12 giây vào ngày 14 tháng 3 năm 2014.

B. Sử dụng cron (mặc dù điều này không phải là một ý tưởng tốt để tắt máy)

Cách tiếp cận khác là sử dụng bộ lập cronlịch được thiết kế để thực hiện các tác vụ vào những thời điểm cụ thể. Nó thường được sử dụng cho các nhiệm vụ sẽ được lặp đi lặp lại nhưng bạn cũng có thể đưa ra thời gian cụ thể. Mỗi người dùng có "crontabs" riêng để kiểm soát những công việc được thực hiện và khi nào. Định dạng chung của crontab là:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Vì vậy, ví dụ, cái này sẽ chạy lsmỗi ngày vào lúc 14:04:

04 14 * * * ls

Để thiết lập một cronjob cho một ngày cụ thể:

  1. Tạo một crontab mới bằng cách chạy crontab -e. Điều này sẽ đưa ra một cửa sổ của trình soạn thảo văn bản yêu thích của bạn.

  2. Thêm dòng này vào tập tin vừa mở. Ví dụ cụ thể này sẽ chạy vào lúc 14:34 ngày 15 tháng 3 năm 2014 nếu ngày đó là thứ Sáu (vì vậy, OK, nó có thể chạy nhiều hơn một lần):

    34 14 15 5  /path/to/command        
    
  3. Lưu tệp và thoát khỏi trình chỉnh sửa.

Câu trả lời SO này gợi ý một cách để nó chỉ chạy một lần nhưng tôi chưa bao giờ sử dụng nó vì vậy tôi không thể bảo đảm cho nó.


2
Lên lịch tắt máy với cron là một thói quen thực sự xấu. Đột nhiên bạn sẽ tự hỏi tại sao máy chủ ngừng hoạt động vào mỗi sáng thứ Hai.
Ouki

4
@Ouki Tôi xin lỗi nhưng tôi không thấy nơi tôi khuyên bạn nên sử dụng cron để tắt máy. Tôi đề cập trong ngoặc đơn rằng nó có thể (nó là) nhưng không khuyến khích nó. Chúng tôi có xu hướng thích câu trả lời toàn diện ở đây, đó là lý do tại sao tôi đưa ra các lựa chọn thay thế khác trong khi không bao giờ đề xuất chúng nên được sử dụng cho shutdown. Tôi cảm thấy cho trải nghiệm tồi tệ đó, mặc dù điều đó không thể dễ chịu.
terdon

2
Đây là nhiều hơn về đề xuất, vì bạn đang trộn shutdownlịch trình và crontrong cùng một câu trả lời ... Cho dù đó là máy trạm hay máy chủ thư 1000 người dùng (trải nghiệm buồn của tôi) là nhiều hơn về hậu quả của một thói quen xấu.
Ouki

3
Tôi với Ouki ở đây. Khi thảo luận shutdown, người ta không nên bao gồm cron. (đặc biệt với một người không biết tại sao đó là một ý tưởng khủng khiếp.)
Ricky Beam

2
Tôi hơi bối rối khi câu trả lời này dường như dẫn đến thông tin đã được giả định bởi câu hỏi. Có vẻ như OP biết cách chỉ định thời gian tắt máy, nhưng muốn biết cách chỉ định cả ngày và giờ. Điều đó được giải quyết trong câu trả lời này, nhưng nó được cung cấp như thể đó là thông tin bổ sung, khi đó là những gì được yêu cầu ở nơi đầu tiên.
Weeble

24

Không, bạn không thể chỉ định ngày tại lệnh tắt máy nhưng có hai lựa chọn thay thế tồn tại:

1) Đơn giản nhất là sử dụng lệnh at . Ví dụ sau sẽ thực thi shutdown +5tại một thời điểm và ngày cụ thể:

echo "shutdown +5" | at 10:05am 2019-01-19

2) nếu bạn không phiền khi sử dụng máy tính của mình và muốn tắt máy trong 24 giờ (24 * 60 = 1440 phút) và bạn chắc chắn hệ thống sẽ không khởi động lại ở giữa:

shutdown -r +1440

2
Lý do cho câu trả lời của tôi ở trên: câu trả lời của terdon là chính xác và rất toàn diện nhưng quá trò chuyện (ít nhất là IMHO)
ndemou

2
Nếu bằng cách trò chuyện, bạn có nghĩa là hữu ích và toàn diện ... Câu trả lời của bạn thậm chí không giải thích được atlệnh.
Anthony

@Anthony Tôi tin rằng cách sử dụng này atxứng đáng không có lời giải thích. Tôi có thể thấy bạn tin tưởng khác. Tâm trí khác nhau, quan điểm khác nhau.
ndemou

Câu trả lời này không còn đúng nữa. Các lệnh van Smoorenburg, Upstart và systemd shutdownkhông cho phép đặc tả ngày. Nhưng bộ công cụ nosh shutdownthì có, hỗ trợ cú pháp BSD lâu đời.
JdeBP

@JdeBP: bạn tin rằng sự thay thế nào trong hai điều này không còn đúng nữa và bạn đã kiểm tra và xác minh chúng chưa? Tôi vừa thử nghiệm cả hai lệnh trong 3 hệ thống (Ubuntu 18.04,16.04 & CentOS 7) và chúng hoạt động tốt. Về phần còn lại của bình luận của bạn ("The van Smoorenburg ...") Tôi không chắc liệu đó có phải là một sự làm rõ của tuyên bố của bạn rằng câu trả lời này không còn đúng hay là một nhận xét chung. Có lẽ bạn nên đăng một câu trả lời với một chút thông tin.
ndemou

6

Nó sẽ tắt hệ thống của bạn lúc 12:00:

$ sudo shutdown -h 12:00

Tùy chọn:

-h, -P, --poweroff

Tắt nguồn máy.

-r, --reboot

Khởi động lại máy.

-c

Hủy bỏ tắt máy đang chờ xử lý.


5
Phương pháp của bạn không hiển thị cách tắt máy vào một ngày cụ thể ...
Askar
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.