Як відключити Linux на певний час від терміналу?


46

Здається, я можу відключитись sudo shutdown, вказавши час або хвилини.

Чи є спосіб вказати дату для відключення?

Відповіді:


78

Ви можете зробити це безпосередньо з shutdown command, див man shutdown.

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

[...]

   time   When to shutdown.

Так, наприклад:

shutdown -h 21:45

Це триватиме shutdown -hо 21:45.


Для команд, які не пропонують цю функціональність, ви можете спробувати одне з:

A. Використання в

atДемон призначений для саме це. Залежно від вашої ОС вам може знадобитися її встановити. У системах на базі Debian це можна зробити за допомогою:

sudo apt-get install at

Існує три способи надати команду at:

  1. Труба:

    $ 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. Збережіть команду, яку потрібно запустити, у текстовому файлі, а потім передайте цей файл 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. Ви також можете передавати atкоманди з STDIN:

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

    Потім натисніть, CtrlDщоб вийти з atоболонки. lsКоманда буде працювати в протягом однієї хвилини.

Ви можете дати дуже точний час у форматі [[CC]YY]MMDDhhmm[.ss], як у

$ at -t 201403142134.12 < script.sh

Це буде запущено сценарій script.shо 21:34 та 12 секунд 14 березня 2014 року.

B. Використання cron (хоча це не є гарною ідеєю для відключення)

Інший підхід - це використання cronпланувальника, який призначений для виконання завдань у визначений час. Зазвичай використовується для завдань, які будуть повторюватися, але ви також можете задати конкретний час. Кожен користувач має власні "кронти", які контролюють, які завдання виконуються та коли. Загальний формат crontab:

*     *     *     *     *  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)

Наприклад, наприклад, це буде працювати lsщодня о 14:04:

04 14 * * * ls

Щоб налаштувати cronjob на конкретну дату:

  1. Створіть новий crontab, запустівши crontab -e. Це відкриє вікно улюбленого редактора тексту.

  2. Додайте цей рядок до файлу, який щойно відкрився. Цей конкретний приклад розпочнеться о 14:34 15 березня 2014 року, якщо цей день є п’ятницею (тож, гаразд, він може працювати більше одного разу):

    34 14 15 5  /path/to/command        
    
  3. Збережіть файл та вийдіть із редактора.

Ця відповідь ТА пропонує спосіб запустити його лише один раз, але я ніколи його не використовував, тому я не можу поручитися за нього.


2
Планування відключення кроном - це дійсно погана звичка. Раптом вам стане цікаво, чому сервер не працює кожного понеділка вранці.
Окі

4
@ Ouki Мені шкода, але я просто не бачу, де я рекомендую використовувати cron для відключення. Я в дужках згадую, що це можливо (є), але не рекомендую. Тут ми, як правило, любимо вичерпні відповіді, тому я запропонував інші варіанти, хоча ніколи не пропонуючи їх використовувати shutdown. Я відчуваю цей поганий досвід, але це не могло бути приємним.
тердон

2
Це більше стосується пропозицій, оскільки ви змішуєте shutdownпланування і cronв тій же самій відповіді ... Це робоча станція або поштовий сервер 1000 користувачів (мій сумний досвід) - це більше про наслідки шкідливої ​​звички.
Ouki

3
Я тут з Окі. При обговоренні shutdownне слід включати cron. (особливо з тим, хто не знатиме, чому це жахлива ідея.)
Рікі Бім

2
Я трохи збентежений, що ця відповідь, здається, призводить до інформації, яка вже передбачається питанням. Схоже, що ОП знає, як вказати час для відключення, але хоче знати, як вказати дату та час. На це йдеться у цій відповіді, але вона надається так, ніби це додаткова інформація, коли це саме те, про що вимагають.
Weeble

24

Ні, ви не можете вказати дату в команді вимкнення, але існують дві альтернативи:

1) Найпростіше використовувати команду at . Наступний приклад буде виконано shutdown +5у визначений час та день:

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

2) якщо ви не заперечуєте за допомогою калькулятора і хочете відключитись, скажімо, 24 години (24 * 60 = 1440 хвилин), і ви абсолютно впевнені, що система не перезавантажиться між ними:

shutdown -r +1440

2
Причина моєї відповіді вище: відповідь Тердона правильна і дуже всебічна, але занадто балакана (принаймні ІМХО)
ndemou

2
Якщо під балаканиною ви маєте на увазі корисну та всебічну ... Ваша відповідь навіть не пояснила atкоманду.
Ентоні

@Anthony Я вважаю, що цей спосіб використання atне заслуговує ніякого пояснення. Я бачу, як ти віриш в інше. Різні уми, різні погляди.
ndemou

Ця відповідь більше не відповідає дійсності. Команди van Smoorenburg, Upstart та systemd shutdownне дозволяють вказати дату. Але чистий набір інструментів shutdownробить, підтримуючи давній синтаксис BSD.
JdeBP

@JdeBP: яка альтернатива з цих двох, на вашу думку, більше не відповідає дійсності, і ви протестували і перевірили, чи їх немає? Я щойно перевірив обидві команди в трьох системах (Ubuntu 18.04, 16.04 та CentOS 7), і вони працювали чудово. Щодо решти вашого коментаря ("Ван Смооренбург ...") я не впевнений, чи є уточненням вашої заяви про те, що ця відповідь більше не відповідає дійсності чи загальний коментар. Можливо, ви повинні опублікувати відповідь з трохи більше інформації.
ndemou

6

Він вимкне вашу систему о 12:00:

$ sudo shutdown -h 12:00

Параметри:

-h, -P, --poweroff

Відключення машини.

-r, --reboot

Перезавантажте машину.

-c

Скасувати очікуване вимкнення.


5
Ваш метод не показує, як завершити роботу в певну дату ...
Аскар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.